Изучение Си и поиск работы

Здравствуйте.

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

Если по обучению вроде почти понятно: есть десятки книг даже на русском (только как проекты делать без наставника — нет) , то с поиском работы пробел.

При поиске на work/rabota «программист С» (или)СИ", сайт подсавляет что угодно (C#, C++), но не выдает что нужн мне, ибо таких вакансий нет :(

👍ПодобаєтьсяСподобалось0
До обраногоВ обраному1
LinkedIn

Найкращі коментарі пропустити

си живет либо в embed/однокристалках либо в серьезном софте (который у нас не разрабатывается)
так что можно для фана фиксить линух (файрфокс, хром, mysql) , а потом через несколько лет уехать в какой нить ред хэт, амазон , майкрософт (но только очень и очень теоретически)

Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Хлопцы, а кто писал СУБД или БД на чистом Си? Есть такие?

Можешь ссылки сбросить, или что почитать лучше для этих целей? Ваша СУБД она с индексами?

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

работы с деревьями

Имеется в виду теория графов? Мне для embedded надо. Есть какая то литература,Я так понимаю вы код не документировали?

Не документировал. Для embedded наверное СУБД громко сказано, обычные структуры данных почитать, покрутить попробовать. Там же не будет оптимизации запросов, транзакций, контроля целостности данных, работы с медленным диском, ACID и ещё с десяток вещей. Чем проще напишите под задачу тем лучше

Смотря какой эмбеддед — 8-bit микроконтроллер или 8-core SoC.
Смотря для чего нужна DB.

Можно посмотреть sqlite
Можно посмотреть NoSQL решения. Redis написан на С, MongoDB на достаточно незамороченном C++.

я думаю простым txt — ом обойтись, проще уже некуда.

Чтобы хранить .txt файлы, нужна файловая система, а это не совсем просто )

Ты не ответил — какое железо.

процессоры семейства ARM
Bluetooth LE.
интеграция с интерфейсами
CAN, LIN, Automotive Ethernet.

Что конкретно надо? Я недавно делал историю звонков и телефонную книгу на С++.

Мне надо хранить данные с датчиков, т.е. простейшая СУБД без всего лишнего и не сильно навороченная.Простейший вариант хранить данные в txt файле содержащий структуры, т.е. объекты , которыt могут занимать больше одного машинного слова. Их сложнее реализовать, чем примитивные типы. Почему сишный компилятор быстрее всего работает с подобными файлами с расширением txt?

Я просто эту информацию с форума взял.Сам на си не пишу. Решаю только прикладные задачи.Если сами не знаете зачем тогда тролить?

Расширение файлу любое можно приделать. Тут важно как на это расширение будет реагировать компилятор. В студии, например, если у файла расширение .c, то будет вызываться С комилятор, поэтому код, написанный на С++, просто неоткомпилируется. Если же у файла расширение .cpp, то автоматом, в студии, вызывается С++ компилятор.

Питон медленный язык.Можно Котлин или жабу заюзать, но там много всего лишнего...

Не только, еще голову иногда подключать надо.Но лучше тогда уж использовать , Cython — приемник питона. Это практически смесь питона и С, и является постепенно типизированным языком. Любой питон-код — это валидный Cython-код, который компилируется в C-код. С помощью Cython ты можешь написать модуль или метод и постепенно двигаться в сторону C-типизации и производительности. Ты можешь смешивать вместе типы C и утиную типизацию питона. Используя Cython, вы получаете идеальную смесь оптимизации только узких мест и красоту питона во всех остальных случаях. Как Вам такое?

На практике сравнивали Python, PyPy, C++ и sed — искали максимальное и минимальное значение в дампе SQL таблицы на 10 гиг. Результаты:
Питон — 10 мин
PyPy — 4 минуты
C++, sed — 3.5 минуты

Для прототипирования может и удобней...

Мне с питона на С++ переходить было тяжело — много лишних скобочек, декларации всякие. Питон супер удобен как для написания кода.

В питоне можно и без скобок например:
from itertools import count

while 1>0:
for i in count(0):
if i > 10:
break
else:
a = a + 12
b = 123 + a
if a+b==12:
print("Yea")
else:
print("No")

Дело в том, что фильм здесь не причем...Но фильм действительно классный, это тема уже другого форума...

В нем куча дофига непонятного кода. Там вообще все переопределено.
И оно работает, на нем куча сайтов.

Я думал вы это имели ввиду ru.wikipedia.org/...​wiki/Джанго_освобождённый, проводя какие то дальние ассоциации...

Мы храним телефонную книгу и историю звонков в текстовых файлах.
Будут следующие грабли:
1) Журналирование — ты можешь дописывать новые данные в конец файла, а не перезаписывать файл целиком. По-идее, это экономит ресурс флеша — но только если драйвер поддерживает, или можешь писать мимо драйвера.
2) Когда перезаписываешь файл, сначала переименуй старый на случай, если программа свалится во время записи. При старте смотри, есть ли переименованный файл, если есть — используй его.
3) Индексы можно либо скидывать на диск отдельным файлом, или перерасчитывать при старте. В одном случае — надо бояться рассинхронизации между базой и индексом, в другом — теряешь время при старте.
4) Базу можно поднять в память, тогда доступ становится синхронным, а бекап в файл — асинхронным.
5) Нужно делать восстановление ошибок, если есть журналирование.
6) На всякий случай каждую запись стоит защищать контрольной суммой.
7) Готовься к версионированию — как минимум, в заголовке файла пиши версию формата файла
8) Числа можно хранить нибблами (0×1234) вместо десятичного формата — так будет быстрее читать и писать
9) Если поднимаешь базу в память, она должна быть фиксированного размера — массив структур + индексы (возможно — отдельными массивами)
10) Если пойдешь в юникод — огребешь

А почему в текстовых файлах храните?В чем перфоменс? На форумах я читал, люди пишут просто, что так будет лучше и всё...

1) Текст можно читать глазами. Когда баги — это +100500 к скорости разработки.
2) Текст кроссплатформенный — файл можно пописать на одном устройстве и почитать на другом
3) Текст можно отобрать у пользователя, если у него баги, и прочесть глазами.
4) Текстовый формат несколько проще версионировать, чем бинарный.
5) Меньше лишнего и проще парсить, чем JSON/XML.

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

Позаботились — есть дамп базы в файл по таймеру, при котором пишется новый файл не больше, чем размер массива с базой в раме, а старый со 100500 журналированных записей — стирается. Ну и у нас не такие объемы — ну там пару звонков в минуту может быть максимум.

Странно, что вы не столкнулись нюансами локалей, например ’.’ и ’,’.

А мы сами пишем как tab separated. Ему локаль должна быть пофиг.

Нет.
1) Нет дробных чисел (это эмбедед)
2) Числе храним в хексах, чтобы не пользоваться делением.

Тем, что возьми запиши в десятичной 1000 из переменной в текст без деления на 10.

а в шестнадцатеричной:

static const char c_nibble_to_char[16] =
{
	'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'
};

char NibbleToChar(const uint8_t source) {
	ASSERT(source < 16);
	return c_nibble_to_char[source];
}

void TabFileWriter::AddHex16(const uint16_t data) {
	buffer_[offset_++] = NibbleToChar(data >> 12);
	buffer_[offset_++] = NibbleToChar((data >> 8) & 0xF);
	buffer_[offset_++] = NibbleToChar((data >> 4) & 0xF);
	buffer_[offset_++] = NibbleToChar(data & 0xF);

	AddEmptyField();
} 
Тем, что возьми запиши в десятичной 1000 из переменной в текст без деления на 10.

Что-то я проблемы не понял. А можно детальнее?
Теперь понял. А что, реально не успевает? Всякие ж printf, в том числе облегченные это ж делают.

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

BCD хранит точно также, как в твоем примере,но от 0 до 9. Но там да, нужно делить на 10.

А что, реально не успевает? Всякие ж printf, в том числе облегченные это ж делают.

А я что, мерял? Сразу сделал хексами чтобы потом не переделывать. printf() вообще — тяжелая штука. Там еще формат ему надо распарсить.

printf() вообще — тяжелая штука.

Смотря какой. Я в мелких проектах юзал xprintf от elm-chan. Там всего один исходник и кода не сильно больше чем в твоем примере. А ну из недостатков, он не юзает внутрених буферов, поэтому вызовы должны быть потокобезопасными

А ты посмотри на размер внутреннего цикла, количество условий и математики github.com/...​ntf/blob/master/xprintf.c

Поэтому мой первый вопрос был

А что, реально не успевает?

Я не мерял. Да и там нельзя сделать, чтобы не успевал — бекап в файл идет в отдельном потоке с низким приоритетом. Но зачем писать медленный код, если можно написать быстрый.

Но зачем писать медленный код, если можно написать быстрый.

Ну я чуток под другим углом смотрю. Зачем изобретать какой-то свой инструментарий, если можно обойтись стандартным/уже написанным. Когда стандартный перестает решать задачи — тогда нужно улучшать/писать свой.

Мне страшно от кода, в котором форматирование идет принтами, а ввод — сканфом. В нем нереально что-то найти. Поэтому предпочитаю сделать все красивенько с отдельными методами под каждую задачу. + какая-то энкапсуляция.

Я не люблю принты в коде, кроме логов. Потом фиг поймешь, кто какую-то строку написал и выплюнул пользователю. А тут — красивенькая отдельная функция AddHex16(), все использования которой по проекту легко найти.

Возможно имелась в виду двоично-десятичная (BCD)
*fixed
Не имелась

Вот что то такое должно получиться:

typedef struct node {
    char param[16]
    int quant;
    struct node * next;
} node_t;
’это односвязные список, вот такими узлами можно построить базу данных параметров датчиков и соответствующих значений.Еще нужно добавить возможность добавлять в начало/в конец, удалять первый/последний/заданный элемент, и.т.д. Кто решал подобную задачу для embedded?

А что конкретно надо?

Вообще интересует построение индексов, для самой простой БД, что бы ничего лишнего,наверняка эта задача тривиальная и уже давно решенная.2.Как построить API для веба. Сейчас первое, что приходит в голову, это просто читать txt средствами высокоуровневого языка, наверное есть решения более эффективные...3.возможно придется настроить обмен данными с другими СУБД, как это организовать наилучшим образом?Возможно эти задачи кто то уже решал?

1) Тебе надо описать требования к БД: максимальное количество записей, какие операции часто проводятся, какие требования к скорости операций и использованию памяти, сколько памяти есть, нужно ли сбрасывать данные на накопитель. Самая простая БД — это массив в оперативке. И самая быстрая.
2) С вебом не работал. Опять — все зависит от того, что этот веб должен делать. Опиши задачи, которые веб будет проводить с этой базой — тогда что-то можно придумать.
3) Кто знает, где лежат другие СУБД? Если у тебя есть сервер — пускай он тянет данные с твоей железки, переформатирует их так, как надо другой СУБД, и в нее пишет. Нефиг в железку совать SQL.

Ну оракл + жаба= сладкая парочка, это все знают. Он с жабой лучше дружит чес с С# например...

скажите, а txt шник-реально скормить другой СУБД , или лучше все таки csv? Тогда точно зайдет...Почему txt шник для це , лучший вариант и он с ним будет работать быстрее?

Если интересно, то я недавно закончил написание сата на голом си + fcgi + spawn-fcgi + mysql + nginx. Я и делаю это просто ради интереса. Если чего обращайтесь И мне даже денег особо особо не надо, так на бутылку на коньяку. :)))))))))

Сколько по времени это у тебя заняло?

Непонмню. Я просто потрял жну роботу, вот взял сел и написал, Чтобы не бухать. Могу дать ссыль все в открытом доступе н github.

Прошу прощения за возможные глюки, но вот github.com/intshushik1024/meat Если кому-нибудь удастся собрать и посмотреть +1 в карму. Запускается через spawn-fcgi. Ну и там nginx. нужно добавить

Если кому интересно, могу показать рабочий сайт на этом быдло-коде. Но это в личку. Либо в фб либо, я первый раз на этом сайте.

Прошу прощения за опечатки, но я уже где-то 17 часов не сплю. :))))))))) Но если что-то нужно подсказать, то я готов.

Если хоть кому-то понравится, форкайте, правте, все что угодно.

Ну я вот недавно вкатился на трейни(уже испытательный закончил). У меня правда было профильное образование(КПИ), но был перерыв последние почти 4 года на армию, так что мозги заржавели конкретно, а извилины выпрямились. Собственно вкатывался так:
1) Вкратце вспомнил электричество и магнетизм (резисторы, конденсаторы, соленоиды, закон Ома и т.п.).
2) Так же вкратце прогнал схемотехнику (от диодов и транзисторов до (де)мультиплексоров и (де)шифраторов). Тут тоже не помешает подучить базовую булевую алгебру(реально по минимуму без карт карно и прочих сложностей).
3) Далее пошел Таненбаум «Архитектура компьютера».
4) На этом пункте я уже вернулся домой, чуть побухал и сел уже за практику паралельно дочитывая Таненбаума. Для практики выбрал этот МITовский курс по операционным системам: pdos.csail.mit.edu/6.828/2018/schedule.html . Курс очень годный, там проганяется практика от бутлоадера до написания сетевого драйвера, в конце у тебя выйдет своя миниОС. Железа никакого не нужно, все пишется под х86 архитектуру(да, большинство вакансий требует arm, но для понимания принципов х86 пойдет) и запускается/дебажится на слегка подпиленом QEMU. В наличии скрипты и юнит тесты которые проверяют каждую лабораторную, так что будет ясно написал ли ты фигню или нет.
5) В конце еще разок полтора прогнал Кернигана-Ричи, к которому правда приходилось обращаться много раз и в процессе написания своей мини ОС.
6) Пошел на собеседование, вроде бы не ударил лицом в грязь

Надеюсь поможет.

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

надо было сразу на сеньора подаваться с такими входными, может и прокатило бы

Та не, я хоть и пользуюсь линуксом давно, но в юзерспейсной(особенно) части довольно сильно плавал, так что явно на синьйора не вытянул бы. :D

спасибо что подписанны на этот тред, при том, ему уже с пол года, не ожидал новых лиц и приятно удивлен .

Какие требования были на трейни, условия ? Вы спрашивали (может нет и понимаете сами) различия трейни и джуна в этой компании ?

Ну сейчас уже точно не скажу, по ссылке уже та вакансия мертва. Но там по минимуму было. Си, линукс, архитектура пк, гит.
На джуна уже нужен какой-то опыт работы в области, что б не нужно было с тобой няньчиться как с трейни.

Скільки часу пішло на кожен пункт?

Ну перші 3 пункта разом йшли, десь в грудні почав читати і до травня. Але важко об’єктивно оцінити час бо постійно треба було або чергування нести, або гівно з обсипаних окопів вигрібати і прочу битовуху тащити. А практиту(МІТшний курс) почав з початку червня і десь в середині серпня закінчив. Трохи на домашні проблеми відвлікався звісно але в основному безвилазно займався.

ребята, вот вакансия, требования для джуниора адекватные?
какая зп может быть? (не указанно)
jobs.dou.ua/...​lvision/vacancies/106313

кто написал и что?

я программировать то не умею, куда идти и зачем ? :(

интерес по-прежнему есть и желание попробовать себя в этом, хз моё ли и как буде получаться.
ранее работал, щас вободен.

ибо интересно низкоуровневое

пока ищу работу по рекламе, здесь хоть есть вариант устроится и зарабатыватьна жизнь.
на СИ не пишу еще, не было возможности распялятся

Требования адекватные, человеческим языком переводятся «почитай про линуксовые сокеты и понимай, чем UDP от TCP отличается и когда какой из них используют». ЗП может быть от 400 до 1000 баков — зависит от конторы и как себя покажешь.

спасибо большое!
но сокеты и протоколы это доп.навыки или знания, а как по самому языку — что нужно знать по СИ и уметь писать, придя новичком конкретно в вашу фирму?

Наша фирма новичков не берет

но сокеты и протоколы это доп.навыки или знания

чувак так ты слона не продашь

но сокеты и протоколы это доп.навыки или знания

Тогда лучше остаться там где ты сейчас.

Зачeм Тебе язык Це, лучше учи Rust///

уже советовал человек, но где вакансии? на work — 0, на dou 1 , senior .
он мне говорил, что в ближайшие пару-тройку лет Раст обойдет по востребованности с/с++.

можете не умеющему искать подскинуть ссылку?
и какой опыт? я ж нуб.

приходять час від часу вакансії на блокчейн, навіть щось про НАСА проекти щось розказували, що шукають

Хочу освоить именно этот язык, т.к. со школы манил

Если «манил» это от слова «money» то забудь.

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

Ассемблер там хоть не собираешься учить? Вместе с пайкой?

Квантор всеобщности тут, все же, не стоило использовать. Исключения есть.

почему нет, если человек имеет инженерное образование, желательно инженер- электронщик?

asm не, а вы в чем специалист? не видно из профиля. какой у вас лично опыт с встраиваемыми системами?

почему такое отношение к эмбеддед , вы работали в этом (надеюсь) или вам рассказывали?

Потому что ембедед большей частью требует доступа к железу и не по ssh в америку.

ну по логике у нас могли бы быть нормальные ремоуты, если там не промышленные роботы, а потребительская мелочь, то отдельную железяку можно и по почте получить, а с китайскими сервисами прототипирования нынче можно собрать образец вполне заводского качества, отдебагить и отправить результат заказчику, если он нужен, но реальность иная конечно)

всьо пізно, кордони захлопнулись, кто нє успєл, тот опіздав

Привіт з майбутнього, ви єкстрасенс

в будущее смотреть могут не только лишь все, мало кто может делать

сам язык Си прост, куда проще чем С++. Зачастую сложна именно предметная область.

подтяну основы, дальше что и куда?
у меня сложилось мнение, что по нему ищут спецов самостоятельных, а не джунов, которыми нужно руководить и уделят время.

Джуны, которыми нужно руководить, не нужны никому.
Нужен человек, которому можно дать задачу, сказать, куда копать, он накопает, покажет, тогда скажешь, что переделать. Он переделает и все ок. То есть, внимание требует раз в день, кушает мало, а работает — много.

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

Вот тебе два опенсорсовских сишных проекта — OBS и FFMPEG. Используются для видео обработки. Альтернативы им практически нет. А если есть, то жалкое подобие им или используют их библиотеки (как делаю я). Скачивай код, изучай, можешь даже поучаствовать там, пофиксить баги. Освоишь их — ищи работу, нет — нах.

Танунафиг такие проекты с таким кодом. Там высокооптимизированные куски, которые невозможно читать, и невозможно понять.

Все сишные проекты такие. Хотя разве, что лабы, но для них есть индусы

Не все, на моей памяти были радиотелефоны, и там более-менее читаемо (правда, event-based). И в дровах upper half может быть (и, вероятно, будет) без оптимизаций по железу. И в юзер спейсе тоже без жести.

Шесть лет назад ffmpeg начал изучать, правда, только кодируемую часть и преобразование в RTMP. Убил на это, где то 4 месяца, пока начал что то писать свое. Опыт в разработки на Си был большой, но область применения по видео пришлось начинать с нуля

Отож. А я за 9 месяцев выучил Питон и С++. Поэтому новичку лезть в видео вряд ли полезно — помрет с голоду, пока освоит.

Вопрос был у него по Си. Я и ответил. Если по честному, то даже и плюсы не прокормят сейчас.

даже и плюсы не прокормят сейчас

 В плане?

мало сейчас С/С++ чистых проектов. Обычно идет зоопарк в прицепе.

А что лучше, питон?

Так про прокорм это не про язык. Прокорм — это область специализации (зачастую узкая). А язык — не более чем инструмент.

прокорм, це скільки на руки:
$400, $1K, $2K5, $5K?

щось довго, як на мене, достатньо тижня для написання клієнт-сервера.

А за за день пишеться приклад згідно манулала,
єдиине, що там час від часу міняється АРІ і приклад виявляється дещо застарілий, і тре адаптовувати,

безумие с закатом солнца ручками — реализация С++ на С

 Это не безумие, а Linux kernel style. Оно реально шустрее, чем С++, и бегает в любой ситуации на любом железе.

И хер соберешь на чем-то, на чем пейсатели его не собирали. Да и на том же самом собрать еще тот танец с бубном.

Это всё зависит не от эмуляции ООП на C, а от других материй. Нарушенный алиасинг, asm-вставки с кривым определением побочных эффектов (сегодня не выстрелило, а завтра чуть другие условия и зацепит). Или шутки типа макроса container_of в Linux, в котором явное разыменование NULL-указателя (пусть даже для проверки типа).

это кстати реальная попоболь с boilerplate-ами попробовать тот же ж SSL который родной в WinAPI запустить это же ж убиться можно )) да в общем там с любым почти API на уровне именно C/C++ так вот реально который .NET реально кучу всякого совершенно бессмысленного и беспощадного просто скрывает просто уже конечную логику позволяя писать и пофиг даже если она на VB даже.

Linux kernel style — это парочка «классов» руками. Чтоб не тащить плюсовый рантайм ради «С с классами».

А как плохой пример — GTK, где на сях напилена сложная объектная модель, где потом сидишь и офигеваешь с багов из-за пропущенного вызова конструктора или неправильного деструктора к какому-нибудь утилитарному объекту.

ну вроде раньше был язык vala, который пытался решить проблемы «входа» в gtk

Почему был? Вроде он и сейчас есть) И судя по гитхабу github.com/GNOME/vala/releases вполне себе жив) И даже есть неофициальные (или все-таки официальные?) сборки под винду sourceforge.net/...​ects/valainstaller/files

а что п.п. «показать оптовые цены» особо доставляет ))

есть что-то менее объемное и сетевое и системное?

оно не сетевое и не системное.
если не нравится сетевое и системное — надо учить питон или жабаскрипт.

я не верно написал:
есть что-то менее объемное, в идеале сетевое и системное?

гляньте lwn.net/Kernel/LDD3
оно точно системное
сетевое — напишите чатик под линукс в консоли

«Прост язык» != «просто писать на языке» (независимо от области).

Я вот в одном проекте уже задолбался вычитывать все эти rtpp_trr_tfx_open и смотреть, чем оно отличается от rtpp_tfx_create_trr. Хочу namespaces и инкапсуляцию, чтобы не надо было следить, кто полез кривыми ручками куда не положено :)

Нет ли на втором мониторе тулзы, которая при наведении указателя мыши на rtpp... покажет описание функции? Я думаю, ОС не предусматривает свободу действий с кодом, ограничивает ее. Почему? Потому что вы перестанете покупать аддоны. Следствие: переписать ОС или использовать AutoIt подобные языки для быстренького запиливания собственных примочек помогающих в описанном выше случае. Имхо на всякое ограничение можно свою утилиту наваять, которая по хоткею или (тут вообще круто — согласно контекста применения (тут распознавание нужно еще) ) взломает ограничение установленное хитрым разработчиком.

Нет ли на втором мониторе тулзы, которая при наведении указателя мыши на rtpp... покажет описание функции?

Это не сильно помогает.

Я думаю, ОС не предусматривает свободу действий с кодом, ограничивает ее.

При чём тут ОС?

Перепутал. ОС в меньшей степени, чем IDE

Только что видел на форуме, как используют «Линукс в качетве IDE», теперь вот это... это что за секта такая образовалась?

так и не дали ответа, зачем тоогда писали?

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

> Даже если книга не устарела, чаще всего у неё кривой/странный перевод.

Даже если перевод правильный, он никому в коммерческих проектах не нужен — все между собой говорят англицизмами.

кто мешает делать университетские лабы

а потом приходит настоящий проект, и понимаешь, что не можешь составить ТЗ, архитектуру, или пережить изменение требований

Коментар порушує правила спільноти і видалений модераторами.

Коментар порушує правила спільноти і видалений модераторами.

Коментар порушує правила спільноти і видалений модераторами.

Коментар порушує правила спільноти і видалений модераторами.

работали? есть инф.по требованиям на СИ? Если есть такие спецы и вакансии.

Работаю. Не знаю на счёт требований. Но, то что я вижу, это востребованность си.

Спросите их на счет вакансии для начинающего и какие требования.

Никто такое делать не будет, предварительно не отсобеседовав Вас во все интерфейсы.
Что Вы знаете и умеете?

В перечне вакансий есть с/с++ вакансии, не поленилась проверить.

Я був на такій співбесіді, де пишуть, переважно, на С.
Будь готовий до такого, якщо йдеш в люксофт на співбесіду:
— Операції з бітами. Як інвертнути 4 біт в числі, як інвертнути всі окрім 4, як просто дізнатись значення певного біту і т.д. це все треба писати на папірці робочий код.
— Знати про структури даних і базові алгоритми.
— Мережі, знати як працює TCP/IP стек, що таке таблиця маршрутизації і навіщо.
— Лінукс, один тільки цей пункт можна розписувати годину. Кернел спейс і юзер спейс, базові команди.
— Ну і сішка звісно. Питають багато збоченого, наприклад, що буде в результаті INT_MAX + 1 і чому. Вміти писати нескладні макроси.
— Бажано шарити плюси, якщо шариш, то почнуться розмови про STL, проблеми в наслідуванні і таблицю віртуальних функцій, ідеально, якщо ще й новий стандарт шариш, але там уже на дві години можна розписувати що питати будуть.

Одним словом, будучи на сіньйорній позиції, мені було достатньо не легко підготуватись до того інтерв’ю, але джуніора чи стажера звісно ж всього того питати не будуть. Текст більше для обрису горизонтів розвитку, якщо вдастся свічнутись.

P.S. Особливо, кхм... як би то не образити, «фанати своєї справи», починають питати за принципи роботи операційних систем, принципи роботи алокаторів пам’яті, принцип роботи оперативної пам’яті, кеші процесора і т.д.

Джунов мучат на собесах больше, чем синьоров. Правда, если ответит 65% — можно взять.

принципи роботи операційних систем, принципи роботи алокаторів пам’яті, принцип роботи оперативної пам’яті, кеші процесора і т.д.

Таненбаум в помощь. Это все весьма полезно, чтобы понимать, что оптимизировать.

Операції з бітами. Як інвертнути 4 біт в числі, як інвертнути всі окрім 4, як просто дізнатись значення певного біту і т.д. це все треба писати на папірці робочий код.

чисто интересно, неужели это что то такое на что нельзя ответить за секунду

Сталкивался с джавистом, для которого оказалось новостью существование big endian и little endian.

Та відповсти без проблем, а написати якусь заумну задачку на листочку може вже бути проблемою. Особливо, якщо не працював з цим останні декілька місяців, нюанси забуваються.

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

ого, приличный список, удивили в конце рассказа.
а что нужно знать было стажеру и джуну из перечисленного?
и что вы или тим лид поручали разрабатывать ?

Это на джуна и будут спрашивать. Надо знать любые 60-80%, тогда есть шанс пройти.

спрашуючі будуть знати хоть 40%? разом чи кожен отдєльно?

Сишник с сеньорным опытом — все 100%, включая еще много упущенных пунктов. Это ж самые азы.

Як на мене, якщо ми говоримо саме про джуніора який претендує на позицію саме С розробника, то я б очікував:
1. Перш за все знання С, як би дивно це не звучало. Структури, макроси, арифметика з вказівниками, вказівники на функції, макроси, приведення типів.
2. Базовий CS, алгоритми і структури даних.
3. Знання лінукса хоча б на юзерському рівні.
4. Хоча б мінімальне уявлення про мережі, рівні OSI, TCP/IP
5. Вміти прості операції з бітами.
6. Загальна комп’ютерна грамотність. Знати як налаштувати мережу, як встановити в лінуксі хоча б IDE.

і навіщо знання лінукса сішнику?

Загальна комп’ютерна грамотність. Знати як налаштувати мережу, як встановити в лінуксі хоча б IDE.

а ще ворд, екзель і починити прінтер в бухгалтерші, тиж праграмізд

Бо лінукс на С пишеться, нє?

ядро на С, але ж нашо, як уже папіредниками написано до нас

бо залізо нове, і оті папі про нього не знали

да не настільки нове, що нада дрова з нуля херачить
там пару регістрів може надо добавить\ініціалізувати,
копіпаста рулить

та часто хочуть те залізо поставить іншим раком...

А вот статейка в тему. Читается как блокбастер! habr.com/ru/post/459136

ага прикольная штука кстати довольно годно описана реальная работа пусть и «в обычном режиме» она «в позитивном ключе» ))

ЗЫ: хотя распаять на схеме не те запчасти либо не так в общем скорее обычная практика чем наоборот ну а что программисты же ж в коде тоже баги пишут? ))

> і навіщо знання лінукса сішнику?

Бо під інші ОС майже всі пишуть на новомодних дотнетах/свіфтах. Хіба що драйвери до вінди, але й ті на плюсах.

ой, ми знову в світ десктопа?

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

А какие ОС в ходу у машин лёрнеров?

а я от не знаю що таке таблиця маршрутизації і знати не хочу і не збираюся це вчити найближчим часом і вважаю що воно не потрібно, так як це знання специфічні для розробників різного виду мережевого обладнання яке мені нахєр не впало зовсім, так що ?

а потім бідкаються, бо або vpn працює, або гугль, а щоб і те і те — ні гг

це проблеми ІСТ га(е)їв
от запитай Чиндженки, який працює з ЦОС, нах йому впала таблиця маршрутизації?

у наших хмарах та апворках, такі може і є, але навіть спроба з ними поспілкуватися якось не гарно виглядає

Якщо у вакансії є вимога шарити мережі, що запропонуєте запитувати?
А якщо це джуніор або просто людина, яка не мала комерційних проектів де б довелося працювати з мережами?

Забудь про C. Это худшее направление с такими исходными данными.

со школы манил реверсинг софта, низкоуровневое программирование, возможность разработки драйверов

А конкурировать прийдётся с людьми, которые со школы этим занимались. Без наставников.

Нифига. Я в 25 зашел в С, и в третий день работы увидел на проекте такой код, от которого понял, что не я здесь самый тупой. Правда, это были голодные 2000-е.

в третий день работы увидел на проекте такой код...
Правда, это были голодные 2000-е.

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

Я не о том, а что вайтишников мало было, и брали кого подряд. Сейчас больше хотят знаний.

спасибо за мотивацию, если сейчас разрабатываете на СИ, то что можете сказать по работе с этим языком и ее поиску? Какие продукты пишите?

Вот прям щас на С++. В эмбедед они вместе идут обычно, если не специализироваться на внутренностях линукса или совсем мелких контроллерах. Для линукса — чистый С.
Сидел на разном от радиотелефонов до поисковой системы и браузера, сейчас — телефония внутри роутера.

касательно эмбеда: покупа одноплатник, что дальше писать и проективать? для разработки проекта нужна плата расширения, если это робот или машинка, то плата для упр. сервоприводами. Но что писать то в этом случае?
Тут еще мышление нужно подстроить в правильное русло, на это время может понадобится.

я нахожусь в верхней половине эмбедеда — работаю с софтом, а не с железом. Начинал с игрушки sourceforge.net/projects/colours
что делать с одноплатником — не подскажу

Знаходжусь в нижній половині ембеду, працюю більше із залізом. В даний час займаюсь роботами. На одноплатнику відносно важкі задачі, навігація, компютерний зір, і подібне — одноплатиник передає дані на мікроконтроллер, який керує двигунами і сервоприводами. Плати роблю кастомні під конктетні задачі. На одноплатнику лінукс, на мікроконтроллері FreeRTOS.

нифига это не низ, но зависит от объема работ конечно же, может вы часть из указанного делаете.
посмотрите, надеюсь актуально будет armpc.ru

Щось не зовсім вас зрозумів...Одноплатні комп’ютери це Raspberry Pi, Beaglebone, Nvidia Jetson та інші.

Определись с направлением, которое хочешь ковырять. Если хочется попробовать сеть и ядро, то можно в следующем порядке.
1 Написать сетевой драйвер из LDD3
2 Написать клиент-сервер для юзерспейса. Посмотреть как твои пакеты из юзерспейса в драйвер бегают
3 Написать свой сетевой фильтр (это тоже модуль ядра). Посмотреть, перехватывает ли он твой трафик. Добавить в него возможность некой конфигурации через sysfs и/или netlink сокеты.
(Пункт 1 — 3 можно отладить на компе)
4 (опционально) Для одноплатника можно попробовать собрать образ системы в чем-то популярном. yocto, openwrt...
5 Добавить в ядро свои простенькие сокеты (для этого нужно sdk, йокто его умеет собирать, не знаю как у опенврт дела) с поддержкой пакетов-датаграмм (изобрести свое UDP) Направить эти пакеты в свой сетевой драйвер.

1 Написать сетевой драйвер из LDD3

а где спеку на сетевую карту взять? разве что из готового кода ядра ковырнуть?

Направить эти пакеты в свой сетевой драйвер.

лучше сразу RDMA поднять )) кстати если подумать у интеловских чипов открытые спеки...

Там SLIP loopback. Будет назад получать все что отправил

это типа «драйвер виртуальной карты»? чёт мне кажется и мой опыт тоже это же ж и показывает что и опыт такого тоже будет «скорее виртуальным». вся макотка начинается когда оно начинает говорить с уже реальным железом. а просто модуль в ядро сунуть дело нехитрое.

ЗЫ: опять же ж конечно смотря какая задача стоит чему научиться и научиться ли чему-нибудь реально

Та там пока сунешь все пальцы об многопоточность и прерывания обобьешь

дык! вот и я об том жы ж вот приходит такой чел я говорил дривера под линукс ядра писал! ок говорю а накидай тупую схему многопоточности на прерываниях хотя нет пожалуй это тяжело ну пусть будет хотя бы б как ты прерывания своей сетевой карты обрабатывал или может ты её пулил тоже норм или может ты DMA умеешь? а получается он реально написал (взял напрямую пример кода с LDD) «болванку» модуля ядра и даже 1 раз её загрузил а в реальности там ничего.

ЗЫ: а вы говорите «режимы работы транзистора» (к) (тм)

Пускай сначала хоть с такого начнет. Будет что-то типа хелловорлда.

было все понятно до п.5, зачем? и зачем собирать свой образ, какую цель преследовать?

по описанию, целый фаерволл получится :)

так отож «напоркуя»? що воно дасть?

ну так ковырять сеть так ковырять. Разберешься как сетевая подсистема в линуксе устроена.

и зачем собирать свой образ, какую цель преследовать?

Ну, как минимум, чтоб руками пощупать как линукс на железке стартует. И что делать если не стартует. И что делать если в ядро нужно что-то свое добавить. Ты ж хотел

касательно эмбеда: покупа одноплатник....

А то рассказывали мне историю. Решил разработчик внутри компании деятельность сменить. Приходит и говорит: «Хочу разрабатывать под эмбеддед линукс». А ему в ответ: «Ну, чтобы далеко не ходить, расскажи как и в какой последовательности на малинке линукс запускается. Не знаешь? Ну, приходи когда узнаешь»

блэ, складно все пишите, но я сомневаюсь что у меня оперативы хватит понять, усвоить и переварить это

Решил разработчик внутри компании деятельность сменить. Приходит и говорит: «Хочу разрабатывать под эмбеддед линукс». А ему в ответ: «Ну, чтобы далеко не ходить, расскажи как и в какой последовательности на малинке линукс запускается. Не знаешь? Ну, приходи когда узнаешь»

ЧСВ таке ЧСВ

В простонародье это ЧСВ называется «новые ревизии железа»

а криптор написать, сильно нужно грамотным быть в теории и практике? Как минимум: знание РЕ формата(исполняемые файлы Виндовс), работа с файлами, анализ сигнатур ...

от накуя це все, я от знову повторюся, цього не робив і не збираюся робити, так як це дуже обмежена сфера телекому, який я обходжу 10ю дорогою, тому що там нудьга і пздць

Тільки в ній вакансій третина від усього київського ембедеда

я в курсі, що WiFi хантять, слава Богу, що ледве відбився від того спаму

от накуя це все, я от знову повторюся, цього не робив і не збираюся робити

Я не знаю зачем тебе это, поскольку ты занимаешься совершенно другими вещами. Я могу сказать зачем это мне. Я этим себе на хлеб с маслом зарабатываю.
Я даже больше скажу. Я вообще не понимаю зачем ты влез со своим особо ценным мнением и начал примерять это на себя (и, подозреваю, сравнивать со своей текущей деятельностью у себя в голове). Ы — логика.

так як це дуже обмежена сфера телекому, який я обходжу 10ю дорогою, тому що там нудьга і пздць

Все мужики, расходимся. Муха (которые как известно, редко ошибаются) сказал что телеком это скукота и п****ц. Закрываем это направление в Украине. Все, кому интересно — вы неправы. На самом деле вам неинтересно, но вы притворяетесь.

Я вообще не понимаю зачем ты влез со своим особо ценным мнением и начал примерять это на себя

лол, просто лол,
твоя думка тут так само ціна і моя

Я этим себе на хлеб с маслом зарабатываю.

решта, наверно, в АТБ «ахрана атмєна»

сказал что телеком это скукота и п****ц

так тому воно й оутсорситься,
в 99% оусорситься некритична руттина робота

дивись, я от «вітаю» написання коду «тупого» коду, так щоб нуб зрозумів,
бо за 2 тижня, можливо тобі тре буде його читати,
а там — «мамамія, чьо автор хотів сказати?»

Та ні, він просто був тормозний з зайвими malloc/free на рівному місці під буфера, коли можна було напряму нормально зробить

какими иходными данными? то, что занимался реверсом софта и досихпор не утратил интерес к системному? и что не повелся на высокую з/п и не освоил популярный язык?

На самом деле просто знаний C очень мало, C легко изучаемый язык, куда важнее знаная "вокруг"(конкретно уже зависит от направления разработки) C ибо C низкоуровневый язык

Вот тут полно работы jobs.dou.ua/...​ancies/?category=Embedded
Также можно глянуть на сайтах крупных аутсорсеров (ГлобалЛоджик, Люксофт, Циклум, Софтсервы и Инфопульсы разные) — у них эмбедеда хватает.
Еще всякие Юбиквити, Мелланоксы и Ринги.
Посмотрите, что дополнительно требуется (С++, Линукс, многопоточность, сети, железо, ассемблер).
Драйвера раньше учили по книжице lwn.net/Kernel/LDD3
По практике — могу что-то советовать, skype: denys.poltorak
Может быть проще вначале Питон выучить и на нем тренироваться, потом — почитать teach yourself C++ in 21 days и чето написать, потом — искать работу, зная 3 языка.

всего 2 вакансии для человека с опытом работы меньше года

так у них и выбор кандидатов небольшой, что компенсирует

(На третьей неделе сплошных собеседований на Trainee C developer)
Где это там выбор кандидатов небольшой?!

а откуда они приходят?

Как правило, с различных курсов с «гарантированным трудоустройством», коих развелось в последнее время.

Сколько уже наняли за 3 недели?

Цифру назвать не могу, но где-то из семерых 1 проходит.

интересно, а под какой проект вы берете именно Си-шников и какой входной порог? Даже если вакансий уже нет, уведомите что нужно, сохраню себе для ориентира в дебрях 8)

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

Что по направлениям, то С — это сплошной embedded. А это значит Linux или RTOS, а также умение все это разворачивать на свежеспроектированной плате (а значит, еще слегка глюченной) в минимально необходимой комплектации. Embedded, в свою очередь, почти всегда идет бок о бок с сетями, зачастую это основной способ коммуникации железки с внешним миром. Гуру динамической маршрутизации быть не обязательно, но маст-хев — понимание того, что проходит через домашний роутер при загрузке веб-странички из инета на домашнем компе, и как поднять на этом самом компе сервер, доступный оттуда.

Та ну, это у вас какой-то сетевой проект.
В Люксофте надо будет CAN шину, а не сети.
Или OS-less проектики бывают, вроде датчиков всяких.

Ну в Люксофте это, как правило, автомотив. Он также попадает под определение «embedded», но обычно его выделяют в отдельное направление, т.к. масса своей специфики.

Тогда телеком тоже надо выделять... И сети... И IoT.... И ничего не останется в результате

Нет. Между этими направлениями можно спокойно переключаться и не увидеть ничего для себя нового. Но вы — первый человек на моей памяти, кто подразумевал автомотив, говоря «эмбеддед».

вобщето в аутомотив більше ембеддед, чим всякі там роутери\світчери

посмотрел вакансии вашей компании — по моему «скиллу» нет, в тех двух 5 лет стажа.

> загуглить специальные сайты поиска работы для IT-специалистов, где могут таких искать
Так вот он и загуглил. Только вместо просмотра вакансий написал на форум...

отстроумный Вы 8)
Что интересно, все кто отписался работают в конкретных компаниях и только у вас ничего не указанно.
Зачем написали то ?

Не спорь с анонимусом — он начнет размножаться делением

C — достаточно простой язык, и при наличии некоторого бекграунда, учится за неделю, максимум две.

реверсинг софта, низкоуровневое программирование, возможность разработки драйверов

Для этого нужн несколько другой набор знаний, чем абстактное «знание С». И да, работы (для джунов) тут нет,
Если все-таки интересно, можно только посоветовать, продолжать «ковырять» драйвера и низкоуровневое программирование самостоятельно (как вариант, начать с багов в oss), «прокачаться» таким образом до сеньйора, а там как повезет — очень возможно, что вся эта возня с битами просто надоест )

вы серьёзно, изучать нулевому драйвера? О_О
почему не исходники опенсорсных проектов или выложенных в сеть программ?

В основном там «тихий ужас». Приходят эмбеддеры и начинают программировать на С под многопоточную и многозадачную ОС. Заодно в 1 лицо изобретают, как они там у себя привыкли, виртуальный функции и прочее (ну т.е. С++).
Такое себе удовльствие вобщем. Я пробовал ардуину на С++ программить шаблонами. Код много лучче читаем, а размер бинарника такой же.

многопоточную и многозадачную ОС

uC-OS2 занимала 8КБ (кажется) и поддерживала многопоточность. И С++ там никуда не лезет, потому что обычно недостаточно оперативки для динамического аллокатора.

Ну так аллокаторы можно не использовать или указать свои...Не обязательно юзать стл, можно, скажем, как на «С с шаблонами» писать :) Я, кстати, стл тупо копировал частями прям нужными себе в ардуино проект. С десктопа хидера. А потом подпиливал под задачу.

А про «тихий ужас» — гляньте rtl-sdr Сишный вариант, вот где эмбедер видимо гулял. Это, кстати, я переписал на яве (кроме libusb), и заставил на 1 ядре андроид 1Ггц работать вполне быстро — 300к сэмплов/с.

тут вопрос, зачем туда тянуть С++. ИМО на мелких проектах С вполне ок.

Та ну не зачем да...а потом массивы указателей на функции, которые устанавливаются в зависимости от текущей модели девайса (я про rtl-sdr), т.о. чувак изобрел виртуальные ф. на С. Ну и много чего там такого.
Ну и вобще, тот же шаблон — всегда удобно. Перегрузка функций ..

чувак изобрел виртуальные ф. на С

 Так дрова в ядре линуха работают. Никто ничего не изобретал. Это С++ изобрели какие-то мажоры.

Якщо С++ для мажорів, що тоді з Java/C#/Python...?

то для немовлят))))

Да, если хочешь устроиться на работу — разбирайся lwn.net/Kernel/LDD3
Голый С никому не нужен. Либо идешь вверх (С++, Питон, архитектура), либо — вниз (драйвера, ассемблер, железо).

Либо идешь вверх (С++, Питон, архитектура)

а чо не Go, Java, Rust?

либо — вниз (драйвера, ассемблер, железо)

не в цій країні

а чо не Go, Java, Rust?

Бо вони з С не стекаються. А Пітон та С++ — стекаються, є позиції, де як раз такий набір потрібен.

Якщо бекенд то ще як стекаються.
А якщо тести писати, то да Питон.

не знаю — не чув, щоб на проекті були С та Джава. Що то за монстер?

Андроід — раз,
телеметрiя — два...

Думав, там плюси...

Ловлевел С\С++\Rust, бізнес логіка на чому Бог дав

Вроде, без бубна...

Питон в таких проектах для парсинга логов, прогона автотестов, автогенерации кода для экранчиков, и прочих доп задач.

...есть такая штука «javacpp», она по ява классу и С++ коду генерит промежуточную обвертку для вызовов.
Вот подумалось, м.б. можно ее под питон переделать? ) Но эт так, хинт. Мне не зачем.

Вы что, испытали много трудностей при поиске работы по системному ?

не зрозумів запитання, але вна Україні його мало, крім того, я вже кілька років не шукаю роботу\проекти, вони мене «шукають», так що я не можу сказати що робити вайтішнику тепер

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

У rust порог входа, нескоько другой. Если поставить задачу, как «написать простейший драйвер с 0», то на С получится значительно быстрее.
А так да — rust явно, перспективне))

человек только учится программировать, какие драйверы писать?

Человек спрашивает, не про «научится программировать», а

реверсинг софта, низкоуровневое программирование, возможность разработки драйверов

В качестве первого языка и С и rust весьма хреновые, если на то пошло )

Вот это да, а я и не знал, пойду учить жаваскрипт, это ж сейчас модно?

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

это нормально. я когда учился программировать, написал драйвер виртуального рам-диска для MS DOS . а еще вирус и антивирус :-)) когда программирование для тебя хобби , тебе в кайф пробовать разные вещи

спасибо, примерно на одной волне.
я и не думаю что начав программироватьна СИ, найду работу в ближайщие месяца 3. Пока нужно заниматься тем, что получается, и попутно, без спеха и самобичевания изучать новое, не гнобя себя сроками.
Другое дело, что много инф. пока не способен переварить и усвоить, следовательно:
а) обращаться к преподу ( еще разобраться в их квалификации)
б) изучать по форумам и найденным в сети исходникам, читая их, но тут может куда больше времени уйти и год мне точно понадобится.

Виктор, сейчас разрабатываете? Посоветуйте как поступить с вашей точки зрения.

Давно низкоуровневыми штучками не занимаюсь со времен учебы в институте (у меня дипломная работа была написана на Си и Ассемблере), пишу унылый энтерпрайз ради денег. Поступайте по велению сердца :-) к чему душа лежит

Как их можно вообще сравнивать? rust если сравнивать, то только с modern c++

Если уж говорить о других языках, то какой-нибудь python перспективнее их обоих вместе взятых... или я плохо понимаю, о каких перспективах речь?

Перспективы написать драйвер ядра на python у вас около-нулевые

Перспектив вообще работать, у кого-либо, с ядром примерно столько же.

Это вы не видили драйвера для лазерников кэнон времен примерно 2010г.
За последние 9 лет ломались несколько раз, потому что питон уже изменили, а в драйвере в 1й строчке в комменте не хватало " - ", 3 дня искал...питон, да...

мой косяк, который не придумал как подоброть — я плохо усваиваю и перевариваю большие потоки инфы, а изучая высокоуровневый язык этого не избежать. Помимо языка (который куда больше СИ), будут фреймворки , библиотеки.

Поправьте если заблуждаюсь.

информации в вашем посте считай нет, а вы со своего опыта рассказать можете? есть опыт?

чому нема, Rust має достатньо можливостей замінити як С та і С++,
він не такий «простий як С» і не такий «заворочений як С++», тобто десь посерединці між ними,
має відмінну від обох парадигму щодо безпеки «якщо код скопілювався то в 99,9% не буде крешитися», тобто відпадає велика кількість часу потраченого на виловнювання причин сегфолтів та іншої непонятності в рантамі
От зроби проект на С на распбері, а потім на Rust (напр. метеостанцію) і відчуй разніцу.

:)
Для початку хоча б поряд стати, а вже потім «замінювати».
C++17/20/23 чим вам не Rust/Java в майбутньому?
Не до того все йде?

C++17/20/23 чим вам не Rust/Java в майбутньому?

частково так, але С++ монстр, а Rust десь так як Go але без GC

Не до того все йде?

ні, так як добавляється сінтакс шуга, але концепт остається старий: С з класами ©

Так про цукор можна до будь чого сказати.
Залежить від того, що є найнижчим рівнем;)
С + класи теж цукор по відношенню до АСМ.

концепт С++ від цього змінився, чи так і лишається «С з класами»?

До С++11 залишається, після я вже не певен.

Креши, сегфолты... такое ощущение, что Rust создавали и продвигали программисты-новички. С опытом понимаешь, что бояться стоит далеко не этого.

Лично я уже давно не видел багов, от которых могла бы защитить «парадигма безопасности Rust»...

> возможность разработки драйверов ...

У Львові — 3-го числа почались заняття GL, мала ймовірність що візьмуть з запізненням, але все ж спробуйте — напишіть їм
dou.ua/calendar/27200

Раніше були, наприклад, такі курси:
dou.ua/calendar/21695
dou.ua/forums/topic/21220

Про семінари:
dou.ua/forums/topic/25885

Моніторте їхні новини.
www.globallogic.com/ua/who-we-are/news/#all

Написал дня 3 как им на почту, тишина.
большое спасибо, хотя сомнения что за 2 дня можно чему-то научиться.
и интересно, для чего эти бесплатные воркшопы, ищут таланты?

Можливо це вас також зацікавить: plvision.eu/...​tm_campaign=Post-Bootcamp

наверное, це воно, но времени крайне мало на подготовку и добраться еще нужна и жилье найти на 2 дня. Думаю в этом году нет, а как через год будет, поживем-увидим. Я только интересуюсь , может и не мое.
На выходных из дому книжку С.Прата привезу, не зря покупал 3 года назад, чувствовал пригодится.

Ця книга по С теж хороша: www.amazon.com/...​ers-Library/dp/0321776410

також можете спробувати курс CS50, там дуже цікаві задачі на С. Є варіанти дивитись оригінал на edx англійською : www.edx.org/...​ction-to-computer-science
або український переклад на Prometeus:
courses.prometheus.org.ua/...​etheus CS50 2019_T1/about

Не так давно набирали кучу программистов на сях — софт для роутеров разрабатывать.
Так что бывает и такое.

На железо от 64Мб оперативы? Да там Контр страйк пускать можно, нефиг там с сями делать, CPP рулит.

Смотря какой софт... если это модули Линукса, то там проще писать на сях, чем тащить туда плюсовый рантайм.

П.С.: По секрету скажу, программирование в духе современного С++ больше кушает русурсы не ОЗУ, а ЦП.

Флеш оно кушает, который в железках дефицитный

Для STM32F4, STM32F7, STM32H7, PSOC 6 без проблем можна писати на С++ (зрозуміло що з певними обмеженнями)

У этих традиционно флеша больше. А вот когда на железке 1GB RAM и 32 MB флеша, то начинаешь задумываться, а точно ли нужно питон в дистрибутив включать.

тому що на МСU 2Mb йдуть суто на фірмвару, 32 MB на SCB потрібно ще розділити із Linux :)

Угу, только это правильно называть си с классами

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

А ты думаешь там ядро пишут? Больше как раз прикладного счастия.

Думаю да, ядра достаточно пишут. Админки ведь можно между моделями хоть в бинарном виде копировать, да и фичи туда не каждый день добавляются — топовый асус 2019го года по функционалу никуда не убежал от всяких -WRT 10ти летней давности. Анимашек в UI стало побольше в основном, и всё.
Ну и меня как-то звали на такой проект, рассказывали чем они занимаются.

вы собеседовали? расскажите о требованиях.

Ты бы ещё на ассемблер поискал в 21-ом веке

Любое мультимедиа, DSP, компиляторы, рантаймы итд итп.
Но, конечно, в 21м-то веке сам шик — шлёпать формочки тысячами.

Конечно. Формочки надо шлёпать тыщами а на си работы очень мало

информативно, может еще что напишите? Вы ж гуру 8 )

си живет либо в embed/однокристалках либо в серьезном софте (который у нас не разрабатывается)
так что можно для фана фиксить линух (файрфокс, хром, mysql) , а потом через несколько лет уехать в какой нить ред хэт, амазон , майкрософт (но только очень и очень теоретически)

вы правы, не против встраиваемых систем.

у вас есть опыт разработки под системы? напишите хотя бы вкратце.

у меня такого опыта нет. да и с си сейчас пересекаюсь в виде — посмотреть код ядра линуха, как там чет хитрое реализовано, или в случае крешей сделать backtrace, попытаться локализовать баг и отправить разработчикам
но в принципе не думаю что там что-то космическое — код и код , ну может отлаживать приходится внутри девайса, но вроде тоже как-то решено

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

только что заплакал один торвальдс

Для устройств с ограниченной памятью — живее всех живых. Но его можно знать как довесок к CPP, как отдельный он... ну скажем так, для школы сойдёт.

плюсую, один С знать мало, помимо С++, я бы добавил Python/BASH, RTOS, часто нужно иметь глубокие знания в эмбед интерфейсах: i2c, spi, uart, can, ethernet. На фоне общего объёма знаний, я бы С отвёл только 10%.
Если бы я вернулся бы на 10 лет назад, то выбрал бы back-end направлени.

+ знання електроніки, хоча б на рівні читання схем.

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

І так і ні :) Наприклад дроти відійшли від плати і все перестало працювати, є схема по якій все можна відновити, але програміст не вміє читати схему, а ті хто вміють у відпустці :)
Хоча це якийсь сферичний випадок, ніколи не бачив ембеддера який не вміє читати схему і користуватись осцилографом, навіть якщо робить це не часто.

Все залежить від компанії. Мій приклад: на всіх компаніях де я працював і працюю зараз потрібні знання С, Python, електорніка (аналогова і цифрова), мікроконтроллери, PCB.

Не кажу що ембуддеру потрібно знати всі нюанси в електроніці, але наприклад розуміти чому двигун не можна напряму живити від піна MCU не зашкодить нікому.

З девайсами на Linux простіше, там можна більше акцентуватись тільки на software.

З девайсами на Linux простіше, там можна більше акцентуватись тільки на software.

Та не всегда. Особенно если на новом железе запускать. Приходится и с jtag-ом повозиться и осцилографом потыкаться, чтобу убедится что сигналы бегают. И есть возможность зашить хотя бы SPL, чтобы железо оживить.

С jtag можно возиться до момента пока не поднят загрузчик (u-boot). Собственно после того как завелась память и есть консоль, jtag можно отложить.

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

С jtag можно возиться до момента пока не поднят загрузчик (u-boot)
И есть возможность зашить хотя бы SPL, чтобы железо оживить.

U-boot — частный случай secondary program loader (оно же second stage bootloader)

Это если на железке есть сд карта. И юсб. И оно на тех же пинах, что и на референсной борде. Но так, к сожалению, бывает не всегда.

ніколи не бачив ембеддера який не вміє читати схему і користуватись осцилографом

я не вмію. І асм не знаю. І працював в купі контор, половина — ембедед.
Зазвичай на проекті хоча б чоловік 5, половина розуміє залізо. А от щось велике написати, і не заплутатись в логіці, і схему багатопоточності правильну підібрати — то інші скіли. + якщо щось більш-менш велике, пишеться HAL+OAL(+прокся) і запускається воно на компі, що економить час розробки в рази.

Наприклад дроти відійшли від плати і все перестало працювати

Это все от масштаба задач зависит, сейчас если у меня что-то сломалось, то я звоню специальному человеку и он ногами идет и все чинит. И да, железка воткнута куда-то в сервер и живьем я ее ни разу не видел.
А раньше да, стол обычно был покрыт толстым слоем печатных плат.

На первой работе понадобится что-то одно из этого всего. А на вторую уже возьмут, так как есть опыт.

Если что-то одно знать, то максимум это будут КБ на заводе на минималке и то, если «мама договорится».

Я устраивался с С + С++ + Питон не зная железа, ассемблера, сетей, интерфейсов, RTOS.
В Мелланоксе, к примеру, надо сети. В Люксофте — CAN.
Ну и если видят, что толковый и понимаешь, как програмить — остальному научат.

RTOS и хардварные интерфейсы не спрашивали.
И да, первые 3 года читаешь что можешь найти.

Мене на співбесіді кірм С, запитували CAN, one wire, трігери, регістри, гонки сигналів, ФНЧ, режими роботи транзистора, та багато іншого чого вже не згадаю. І це все на позицію Validation engineer :) Так що все дуже залежить від компанії.

Staff — це приблизно аналог Middle.

То ж позиція така. Якщо нормальний проект, то 95% коду від заліза не залежать, а інші 5% енкапсульовані.

Це проекти із залізом на рівні регістрів та HAL, тому вони від заліза залежать дуже сильно. Так, і ці проекти теж «нормальні», просто інша специфіка.

А скільки там у % логіки порівняно з роботою з залізом? І який приблизно розмір проекту (рядків коду чи КБ)?

По різному буває, оскільки це верифікація блоків SOC, то на С на стороні MCU зроблена обробка команд які приходять від PC — розмір такого коду не великий HAL ліба + користувацький код для обробки команд Kb не більше 256 — цей весь код тісно пов’язаний із залізом. Логіки десь 10-20%, все інше робота із залізом SoC.

Основна логіка йде на PC в Python скрипті, який посилає команди на SoC та машину яка вміє генерувати та міряти сигнали, та читає дані із SoC.

Мої колеги і я працювали на рівні регістрів та бібліотек для
SoC, без розробки бізнес логіки. (це щось схоже на те що має STM32: LL, HAL) — оскільки баги могли бути в С, Verilog чи в залізі, працювати потрібно із осцилографами та логічними аналізаторами. Тому в моєму випадку без знать електроніки просто ніяк.

Ну це якщо дивитися по коду... А якщо по фічах/багах — то половина росте коренями з того самого заліза, а потім йде далі у ті 95% кода із application логікою. Тому й потрібно, щоб всі знали предметну область і деяку уяву про хардварь.

режими роботи транзистора

гагага

Вас дивує що запитують про транзистори в компанії яка займається розробкою мікроконтроллерів, тобто повністю пов’язана із електронікою?

а про цикл Карно не запитували, їх же мікросхеми потім ставляють на автомобілі, як так?

спасибо, я теперь буду спрашивать

а про цикл Карно не запитували, їх же мікросхеми потім ставляють на автомобілі, як так?

Ні, оскільки на відміну від транзисторів до мікросхем не має прямого відношення. Даремно смієтесь, людина яка наприклад тестує GPIO повинна мати поняття про транзистори.

сайпрес, такий сайпрес, удачі в тестуванні транзисторів з циклом Карно

да )) вас не?

Ні, тому що я знав на яку посаду я йшов.
Приклад вимог для тест інженера на подібну вакансію:

Must know:
· Knowledge of radio electronics
· Understanding of simple electronic/crystal oscillator functionality
· I2C bus communication interface
· C# programming
· English speaking and writing skills (at least intermediate)
· Experience in work with a following HW:

Logic analyzer
Oscilloscope
Frequency Counter
Spectrum Analyzer

rabota.ua/...​any1250581/vacancy6720194

www.linkedin.com/...​771/?originalSubdomain=in

transistor англійською буде transistor я пошукав по тексту вимог що до знання transistor не вказано ))

людина яка наприклад тестує GPIO повинна мати поняття про транзистори.

тут розумієте яка справа «людина яка наприклад» (к) (тм) має мати поняття не стільки про транзистори скільки про GPIO і що взагалі які виходи можуть бувають і чим вони відрізняються суто у зовнішньому застосуванні як то що куди можна підключати а куди ні і як саме треба ну і приблизно може бути суто теоретично вона ще може знати суто загальну теорію «чому так» от і все що вона має знати про GPIO.

зате там у «вакансії» написано купа всього з Spread-spectrum та Python programming включно а ну це дуже круто а от може «людина яка наприклад» (к) (тм) взяти той самий python та змоделювати на ньому той самий spread spectrum ну так суто математично адже там чиста математика хіба ні? з одного боку відправили з іншого боку прийняли якщо математика співпала значить прийом нормальний а якщо ні...

або от скажімо геть простеньке

· I2C bus communication interface
· C# programming

тож одразу прямо в лоб «а законектити програму на c# до інтерфейсу на i2c?» нє?

Logic analyzer
Oscilloscope

а logic analyzer якої саме моделі? а зробити з oscilloscope той logic analyzer зможе? ))

ЗЫ: ну і тема транзисторів так і не розкрита... ))

знание про transistor является подмножеством

Knowledge of radio electronics

и GPIO у нас последние лет 70 на транзисторах работают, а не на лампах

и GPIO у нас последние лет 70 на транзисторах работают, а не на лампах

а были и на лампах? а в чём будет разница с транзисторной схемой?

а были и на лампах?

так, в лампових комп’ютерах.

а в чём будет разница с транзисторной схемой?

Напівпровідники. Менші робочі напруги та струми. Схема роботи призно однакова — керування відкриттям/закриттям.

dou.ua/...​rums/topic/27731/#1620757

и GPIO у нас последние лет 70 на транзисторах работают, а не на лампах
а были и на лампах?
так, в лампових комп’ютерах.

конкретні приклади навести зможеш? конкретні схеми використання лампових виходів як GPIO? можливо залишки коду що з ними працював?

а в чём будет разница с транзисторной схемой?
Напівпровідники.

ого та це круто! а які напівпровідники знаєш? як вони взагалі утворюются? як працюють? повертаючись до питання

режими роботи транзистора

як напівпровідники зумовлюють ці «режими роботи»? у чому саме відмінність від електронних ламп у питані «режимів роботи»? от скажімо «популярний термін» такий собі «теплий ламповий звук» (к) (тм) чим він зумовлений? чому виник? чи насправді то є так чи ти радше суб’єктивні людські вигадки? от скажімо людина може розрізнити «режими роботи» напівпровідникових транзисторів від «режимів роботи» електронних ламп? керуючись лише власними почуттями на слух скажімо чи там я не знаю на вигляд якщо то якась візуальна схема. а приборно зможе? як ти будеш будувати схему щоб розрізнити «режими роботи» навівпровідникових транзисторів та електронних ламп користуючись усіма тіма приладдям

Logic analyzer
Oscilloscope
Frequency Counter
Spectrum Analyzer

?

Менші робочі напруги та струми.

ого та це круто! а які саме значення? це про максимальні чи про мінімальні? на яких максимальних та мінімальних значеннях ще здатне працювати те і інше? а якщо вже не здатне то чому саме? а чі можна це якось виправити? схему множення якусь? розширювач спектру? ірідієвий каталізатор позитронної плазми?

от скажімо «щось простеньке» нехай будуть робочі частоти перший 4004 працював на тактовій частоті 400 кГц а вже 8080 був здатний долати 4 МГц але ж нічого такого особливого там не відбулося по суті це та ж сама схема лише розширена вдвічі за розрядністю та за набором команд то у чому ж справа що так одразу на порядок зросла тактова частота? а на менших може працювати? а якщо ні то чому? а як що до сучастних процесорів? Сьогодні вони легко долають межу 4 ГГц тобто робочі частоти зросли ще на 3 порядки а яким саме чином того вдалося досягти? А чому зупинилися? А чому при збільшенні частоти ростуть витрати енергії? А у звичайному звуковому транзисторному підсилювачу теж таке відбувається? Тобто щоб брати високі ноти схемі потрібно більше енергії чи навпаки? А як що до електронних ламп? А які взагалі частоти суто технічно досяжні тим самим «режимам роботи транзистора»?

поняття транзистору як вже написали входить в
Knowledge of radio electronics
По вашій аналогії виходить що у вимогах повинно писати не знання С, а знання наприклад union.

у тому же ж і фішка що то не «по моїй аналогії» то «по ваших вимогах» виходить що насправді «у вимогах» пишуть чистий булшит насправді навіть толком не розуміючи про що саме вони «режими роботи тразистора» і нашо воно насправді їм то треба.

ну от скажімо повертаючись до наших баранів програмістів от пишуть у вимогах «сішарп нннада!» а якої саме версії? )) от ви там у себе свої тести пишете яку версію використовуєте?

я же ж кажу усі ці «вимоги» повний булшит так само як і намагання «з’їхати» з уже конкретних вимог «чи мав досвід працювати з конкретним приладом (тут марка модель рік випуску конфігурація тощо)?» та «ось конкретний прилад ось коротка специфікація його на 1 сторінку чи зможеш з ним працювати? як його взагалі увімкнути? як настроїти? що він взагалі робить?» зможеш працювати усьо проходь молодець ідеш на 3-місячні курси з екзаменом саме з цього приладу (тут марка модель рік випуску конфігурація тощо) не зможеш ну такоє...

... і так я серйозно бачив і продовжую бачити «спеціалістів» які «лише мають уявлення» що про транзистори що про електронні лампи що про сі що про сішарп що про програмування взагалі і т.п. такий різний булшит хоча насправді вони аж знають як воно вмикається (тут марка модель рік випуску конфігурація тощо) та як натиснути кнопку «запустити працювати тест» усьо. і нічо живуть же ж люди ))

Тема транзисторів для того щоб побачити чи людина має базові поняття в електоніці чи ні. Це те саме що запитати що таке вказівник на С, і видно чи людина має поняття С чи ні.

я пошукав по тексту вимог що до знання transistor не вказано

поняття транзистору як вже написали входить в

Knowledge of radio electronics

По вашій аналогії виходить що у вимогах повинно писати не знання С, а знання наприклад union.

Logic analyzer
Oscilloscope
а logic analyzer якої саме моделі? а зробити з oscilloscope той logic analyzer зможе? ))

Запитання схоже на «Автомобіль якої саме моделі ви вмієте водити?»
Тут досвід роботи із приладами.

I2C bus communication interface
· C# programming
тож одразу прямо в лоб «а законектити програму на c# до інтерфейсу на i2c?» нє?

Вони йдуть окреми рядками, на С# мужуть писатись тести пристрою що вміє генерувати і вимірювати , наприклад:
www.ni.com/ru-ru/shop/pxi.html

поняття не стільки про транзистори скільки про GPIO і що взагалі які виходи можуть бувають і чим вони відрізняються суто у зовнішньому застосуванні як то що куди можна підключати а куди ні

Як на мене щоб розуміти як налаштувати і підключити пін в режимі «open drain», потрібно знати що воно таке, принаймі чому так називається.

Ось ще одна компанія, де на сб будуть питати про транзистори і операційні підсилювачі:
www.glassdoor.com/...​t=EMPLOYER_SEARCH_RESULTS

P.S. Чому вас так зачепили транзистори?

Тема транзисторів для того щоб побачити чи людина має базові поняття в електоніці чи ні. Це те саме що запитати що таке вказівник на С, і видно чи людина має поняття С чи ні.

та уж конечно )) ещё раз ваша «тема транзисторов как базовая понятия в электронике» укладывается ровно в тот кусочек очень общего знания «какие бывают gpio и вообще выходы у микросхемы и как их правильно подключать» всё.

первоначальная оригинально озвученная тема

режими роботи транзистора

это вообще настолько общая тема что никакого практического смысла относительно ваших вопросов не имеет.

но вообще конечно раз уж речь зашла за «режимы работы» то конечно интересно узнать какие режимы есть у КМОП и какие есть у TTL и имел ли подопытные дело и с теми и с другими и раз уж речь заходит об «режимах работы транзисторов» то какие скажем схемы усилителей знает отдельно на биполярных и отдельно на полевых транзисторах и соотв. их преимущества исходя из «режима работы транзисторов».

Запитання схоже на «Автомобіль якої саме моделі ви вмієте водити?»

просто потому что «спрашивая» сами «спрашивающие» в 146% случаев а) сами ответов точно не знают б) как не знают и того зачем они вообще это спрашивают и относительно чего вообще это.

ЗЫ: ну вот например спрашивают C# а там оказывается

на С# мужуть писатись тести пристрою що вміє генерувати і вимірювати

т.е. это скорее некий «условный скриптовый язык» для «знания которого» достаточно той же ж сишечки общего здравого смысла и 1-страничной инструкции «как писать тесты для прыстрою що тестуе».

причём как я прямо и приметил уже речь ведь не идёт «об пристрое що тестуе» вообще в принципе но об более чем конкретном PXI и конечно опять же ж есть какой-то другой в котором принцип тот же ж но тесты там на питоне или вообще на паскале но «спрашивают» почему-то конкретно C# но при этом на замечании об знании конкретной модели логического анализатора уже «возникают встречные вопросы за автомобиль» ))

ситуация настолько «классическая» что даже не было смысла начинать «обсуждать» но почему бы б и нет опять же ж схемы усилителей припомнил и вообще вот это всё ))

Пропоную закінчувати :)

Автор цікавиться С, а негідник сюди приплів електроніку та інший офтоп який автора по замовчуванню не цікавив :)

так які режими роботи біполярного транзистора?

Режимів кілька, в цифрових виходах мікроконтроллерів використовуєтсья тільки ключовий.

D, в якому транзистор або закритий або відкритий

поведінку електрона в потенційній ямі не просили описати дифрівняннями?

Як на мене щоб розуміти як налаштувати і підключити пін в режимі «open drain», потрібно знати що воно таке, принаймі чому так називається.

яке має відношення до режиму роботи транзистора? ( і що так і питали, ЖПІО, працює в режимі А бо Бе, а чим можна зробити з 2х ЖПІО стереопідсилювач класа Д, і зробити спектральний його аналіз метедом Фурє)...

Як на мене щоб розуміти як налаштувати і підключити пін в режимі «open drain», потрібно знати що воно таке, принаймі чому так називається.

а чим open drain від open collector відрізняється? ну якщо відрізняється канєшно взагалі? ))

P.S. Чому вас так зачепили транзистори?

неграмотніть чувак войовнича неграмотність )) оно глянь у реальному житті у соціополітекономії та сама історія диви який Президент диви яка Партія диви який Електорат )) та же ж сама історія.

а чим open drain від open collector відрізняється? ну якщо відрізняється канєшно взагалі? ))

схеми подібні, за виключенням типу транзистора.
Дрейн в польовому, колектор в біполярному.

Ну, не джуну же энто всё. Пусть хотя бы инглиш выучит чуть выше «мазе фазе джентельмен»

Одної анг не достатньо, якщо б так було просто всі філологи були б джуніорами :)
Живий приклад plvision.eu/...​tm_campaign=Post-Bootcamp

щоб людину взяли, і вона почала вчитись, потрібно
«If you have prior experience in C programming, welcome to the course.»

А мужики то и не знают....

Тю, так вот значит почему у меня assert постоянно вываливается...

Підписатись на коментарі