Цитата |
---|
Bayda пишет:
Боюсь, что когда Вы доберетесь до манипуляций с указателями, у Вас может поменятся мнение по этому поводу. Плюс есть масса замечательных способов сломать себе мозги типа "int i=5, чему будет равно ++i + ++i".
Ну и главное: Си в основном используется в системном програмировании. Поэтому, кроме собственно языка Си, прийдется изучить еще и системное программирование, а иногда и компьютерную архитектуру, что довольно сложно. Это не то чтобы плюс или минус языка, это выбор для себя, чем больше нравинся заниматься.
|
Сразу видно, что Bayda не сишник

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

Я на интервью люблю спрашивать такой вот вопросик, прошу чувака расшифровать мне переменную Foo и далее тут можно много о чем поговорить, в особенности о const и о том как прикастить указатель типа void (*p)() к Foo и дальше можно побеседовать о указателе на указатель на указатель ***

и это все не теоритические бредни, а вещи которые хоть раз, два но лично я в практике использовал и без них был бы действительно отвратительный код или как мы говорим на работе an ugly code! Понимание этих вещей просто essential для написания красивого и эффективного кода на С, потому как вместо одной структуры с указателями, криворукие чуваки обычно пишут длиннющую функцию с кучей if или switch/case.
typedef int (*Cb)(int*, size_t);
//...
char const* const (*Foo[])(char*, Cb (**)(uint8_t***)) = {NULL};
Про С++. Если вы поднаберетесь опыта и понимания как работают указатели и как работает struct в С, то классы С++ и vtable вам будет понять в 10 раз проще.
Цитата |
---|
Bayda пишет:
Ну и главное: Си в основном используется в системном програмировании. Поэтому, кроме собственно языка Си, прийдется изучить еще и системное программирование, а иногда и компьютерную архитектуру, что довольно сложно. Это не то чтобы плюс или минус языка, это выбор для себя, чем больше нравинся заниматься.
|
Ну тут наверное согласен, хотя на самом деле системное программирование это очень разплывчатое понятие. Что это такое? Написание API, библиотек, драйверов или COM? Да - каждая тема это отдельный пласт знаний и опыта. Далее, асинхронное програмирование, мультипоточная разработка, синхронизация - да - это еще один здоровенный пласт, который к тому же зависит от платформы - виндовс/линукс. Непосредственое манипулирование хардвером - порты, прерывания (IRQ), мапированая память (memory mapped IO) - тоже да. Получается, что даже за 5 лет работы врядли будет возможно проглатить все аспекты системного программирования. Знать обо всем но по вершкам, тут такое не очень приветствуется, а вот быть узким, но супер-специалистом, действительно опытным и разбирающимся в вопросе, пусть только в одном каком нибудь аспекте - это всегда дорого стоит. Да конечно, большой минус в том, что резко сужается круг работ, позиций и компаний, не так как для разработчика какой нить андроид приложений - десяток тысяч позиций по всей Бей Эрии.
Вот тут как-то писали, что у Java девелопер зарплаты повыше чем у Сишников и так далее. Очень сомнительно имхо. Конечно же смотря какие сишники и java девелоперы. Вот у меня очень узко специализированная сфера, я UEFI девелопер, для опытных спецов (я еще не очень опытный, всего 3 года в этой области) зарплаты начинаются от +180 тысяч в год, я видел позиции и по +200 DOE (depending on experience). В Java такие деньги возможно получать только если ты PhD по математике или компьютер саенс и пишешь бэкэнд аналитику для продакшн баз данных где сотня миллионов транзакций в день. У меня есть такой личный пример (друг работал в eBay/PayPal) но таких людей единицы. Другой пример товарищь работает в nVidia пишет на С под линукс драйвера для видео карт. Он больше ничего не знает и не умеет, зато опыт уже более 8 лет, зарплата сейчас 210к в год.
Вот и чешите репу, как говорят.
Я к чему это все. К тому, что все отнасительно.
Цитата |
---|
Bayda пишет:
По моему, эмбедед в 90% случаев - это вообще ассемблер, причем ассемблер конкретного микроконтроллера, потом идут специально заточенные по ембедед юникс-подобные системы вроде QNX и только потом, когда уже аппаратные требования не особо жесткие - линукс.
|
Линукс линукс Байда! Забудте про ассемблер. Писать под custom chip это очень и очень дорого и никто уже такое давно не делает, разве что только под марсоход или спутник какой. Даже в SpaceX (который в космос грузовые ракеты запускает) пишут под линукс. У меня знакомый работает в Локхид Мартин, они авионику разрабатывают, в том числе для военных, представте себе - линукс! Там конечно голое ядро, драйвера под свои устройства они конечно же пишут сами и там 90% си и от силы 10% ассемблер. Все что сверху драйверов чистый С и выше С++. Все контроллеры (если это не Intel изначально) разрабатывают совместымими по инструкциям процессора с Intel. Что бы легже жить было и велосипед не изобретать.