LINUX.ORG.RU

Кто не разрабатывал на Си, тот не разработчик?

 , ,


3

2

Недавно услышал примерно такую фразу:

«Кто не разрабатывал на Си, тот не разработчик»

Вопрос: насколько глубоко нужно погрузиться в разработку на Си, чтобы стать тру-разработчиком (для сферы, не связанной с деланием ПО для железа)?

Ну не в прод же на Си писать будущему сайтостроителю гeймдеву одинэснику девелоперу?! С другой стороны, написать и забилдить пробный хелловорлд с мэллоком и указателями будет не-безполезно и для скрипто-писателя, но достаточно ли? Или стоит отталкиваться от сферы деятельности: каждому написать примерно то, что он будет в дальнейшем делать (или с чем работать) на других ЯП? Например, бэкендщику стоит написать свой веб-сервер и крад-аппу, игроделу свою 2/3d игрушку и т.д. А может нужно написать свой модуль/либу для другого ЯП (основного)?

Или же: "Си не нужен, все программирующие - разработчики" ?

Ваше предложение по достижению тру-девелопер-левела:

  • попрограммируй микроконтроллеры, запили патч ядра Linux'a, а потом лезь в калашный ряд веб-/мобайл-/иной-разработки
  • напиши что-то из своей сферы
  • реализуй модуль/либу для другого ЯП
  • Си не нужен
  • другое

Кто не разрабатывал на Си, тот не разработчик

Кто не знает, как работает микропроцессор, тот не программист. Почему водителей учат, как работает машина, а программиста как работает компьютер нет? Если бы учили, не возникало бы тупых вопросов «что такое указатель».

Puzan ★★★★★
()
Ответ на: комментарий от Harald

да как бы тоже уже нет

Профессионалов ещё учат.

Puzan ★★★★★
()
Ответ на: комментарий от slovazap

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

А на чем написан интерпретатор python? gtk? ffmpeg? Это нужно будет как раз использовать, пригодится умение писать свои модули к сишным библиотекам, отлажить эти модули/библиотеки... Лучше когда понимаешь как это устроено!

Так что Си нужен, но нужен он не везде :-)

vladimir_vist
()
Ответ на: комментарий от vladimir_vist

Так что Си нужен, но нужен он не везде :-)

Только в виде легаси. Плюс из того же Rust можно выставлять «сишный» интерфейс, при этом основная часть кода будет на нормальном безопасном языке.

anonymous
()

Что ты собираешься делать с этой информацией, когда узнаешь что нужно делать?

anonymous
()

насколько глубоко нужно погрузиться в разработку на Си, чтобы стать тру-разработчиком (для сферы, не связанной с деланием ПО для железа)?

Ровно настолько, чтобы разработчик начал ставить себе такие вопросы.

Хочешь сильный геймдев? Плюсы во все поля.

reprimand ★★★★★
()
Ответ на: комментарий от vladimir_vist

А на чем написан интерпретатор python? gtk? ffmpeg?

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

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

Поэтому вместо gtk всегда лучше сразу взять Qt, для встаивания питона есть boost-python (а модули к нему на C писать вообще невозможно, ручной рефкаутинг это ад, и любой сколь либо нетривиальный модуль начинается с плюсовой обёртки над PyObject*), для ffmpeg есть avcpp и ffmpeg-cpp, да вообще враппер над нужным подмножеством пишется тривиально - mylib_init в конструктор, mylib_destroy в деструктор, или вообще в uniqie_ptr с кастомным Deleter. И тут начинается нормальное программирование, без головной боли, утечек, ручной обработки ошибок, с лаконичным, понятным, безопасным и эффективным кодом.

slovazap ★★★★★
()
Ответ на: комментарий от slovazap

изначально написанную на нормальном же языке программирования

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

anonymous
()
Ответ на: комментарий от Puzan

Если бы учили, не возникало бы тупых вопросов «что такое указатель»

Но в микропроцессорах указателей нет. Это довольно высокоуровневая абстракция.

anonymous
()
Ответ на: комментарий от slovazap

процессы, потоки

А принципы работы вычислительной техники и техники программирования можно изучать на любом нормальном ЯВУ.

1. примеры? какие ЯП вы считаете нормальным и почему (если в двух словах) ?

2. как (и с помощью чего) продуктивно объяснить человеку, что такое процессы, потоки, многопоточное программирование без Си ? (это не утверждение о невозможности в форме вопроса, это вопрос)

Edward_I
() автор топика
Ответ на: комментарий от webmonkey

во-первых, "веб-приложухи" - это не только фронт и Си в в бэкэнде используют во всю.

во-вторых, WebAssembly (впрочем, там прямую связь с Си ещё не завезли, как я понимаю).

Edward_I
() автор топика
Ответ на: комментарий от Edward_I

Си в в бэкэнде используют во всю

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

annulen ★★★★★
()
Ответ на: комментарий от RazrFalcon

А си тут при чём?

его можно успешно использовать для объяснения (на пальцах и примерах). (а вот использовать JavaScript или Python, к примеру, так не получиться)

Edward_I
() автор топика

А может нужно написать свой модуль/либу для другого ЯП (основного)?

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

webmonkey
()
Ответ на: комментарий от Edward_I

Процессы и потоки можно и так объяснить. Конкретный ЯП для этого не нужен. Разве что показать примеры реализации низкоуровневых примитивов. Но это сверхнишевая задача.

RazrFalcon ★★★★★
()

Горькая правда в том, что Си щас мало кому нужен, а кому он нужен - могут включить голову и выбрать или Objective-C, или Go, или Swift, или D, на худой конец Rust, но я не уверен, что на Rust можно легко написать либу/расширение для Python, например, или Node.js. В веб и играх C++ используется раз в 5 чаще, чем сишка, си хорош переносимостью и лёгкой интеграцией во всё, что дышит.

menangen ★★★★★
()
Ответ на: комментарий от Edward_I

использовать JavaScript или Python, к примеру, так не получиться

Получится. У нас в институте это давалось на C#, и могло на чем угодно с тем же успехом.

anonymous
()
Ответ на: процессы, потоки от Edward_I

как (и с помощью чего) продуктивно объяснить человеку, что такое процессы, потоки, многопоточное программирование без Си ?

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

anonymous
()
Ответ на: комментарий от Edward_I

Си в в бэкэнде используют во всю.

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

anonymous
()
Ответ на: комментарий от Edward_I

во-первых, «веб-приложухи» - это не только фронт

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

Си в в бэкэнде используют во всю

Да, причем во всех двух кейсах, и один из которых — «Эдик, шестой год пилящий бекенд на сишке, ибо ваистену».

WebAssembly

Си

Ну ты понял, да?

webmonkey
()
Ответ на: комментарий от menangen

но я не уверен, что на Rust можно легко написать либу/расширение для Python, например, или Node.js

Легко пишутся.

freecoder
()
Ответ на: комментарий от slovazap

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

vladimir_vist
()
Ответ на: комментарий от Volas

Там в половине вакансий не отличают C от C#, а половина оборонка и гос сектор - кто туда пойдёт я х.з.

menangen ★★★★★
()
Ответ на: Asm, C, Rust. от sqq

Asm, C, Rust, Death

Логически продолжил твой ряд.

rupert ★★★★★
()

Ваше предложение по достижению тру-девелопер-левела

Начни с английского, затем ООП, параллельно читая официальную документацию на процессоры Intel/ARM. Дальше начни работать над тем, что тебе нравится, что интересно.

А на счёт ЯП все они полнейшее УГ, даже Rust и Java, я уже не говорю об остальных. Можешь попробовать изобрести лучше, но если начнёшь с синтаксиса, то можешь закапывать своё поделие сразу. Я бы начинал с проектирования микропроцессора под новый ЯП.

foror ★★★★★
()
Последнее исправление: foror (всего исправлений: 2)

напиши что-то из своей сферы
реализуй модуль/либу для другого ЯП

this + дополнительный квест:

во всём что ты напилил на С:
а. исправить ошибки(память,индексы,матан)
б. оптимизировать.
в. возможно потом плеваться будешь от:

сайтостроителю гeймдеву одинэснику

etwrq ★★★★★
()

Перестань слушать голоса в своей голове.

anonymous
()
Ответ на: комментарий от anonymous

Но в микропроцессорах указателей нет

Указатель - это адрес. Или ты из тех программистов, кто не представляет как там всё внутри устроено?

Puzan ★★★★★
()

Если в c++ написать:

auto a = 1;
a = a / 2;
У переменной «a» будет тип int, или компилятор сообразит поставить float?

anonymous
()

Решай задачу с помощью языка, а не на языке.

LongLiveUbuntu ★★★★★
()
Ответ на: комментарий от anonymous

А должен? Вообще, никогда так не пишу и вам не советую, обычно указываю верхняя часть меня интересует или нижняя и всегда без целых. Разве что в питоне как-то раз конвертировал байты в гиби/меби/киби байты для удобства восприятия пользователем, там было написано что-то в духе /1024/1024/1024.0, но это просто потому что.

anonymous
()

Здесь кучу хороших аналогий дают:

Dred (06.03.2019 22:35:47)

Не служил - не мужик

Не рожала - не женщина

Не проектируешь в каде - не инженер

Стоматолог - не врач

igor822605 (07.03.2019 13:07:58)

Дрочишь значит - девственник

Puzan (07.03.2019 18:44:25)

Кто не знает, как работает микропроцессор, тот не программист.

grem (08.03.2019 8:29:43)

Не троллишь - не лоровец.

Не стоит ли выносить их в PS «темы»?

Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)
Ответ на: комментарий от menangen

Автомотив то в большой степени именно С. Спрос на разработчиков большой.

vromanov ★★
()
Ответ на: комментарий от Deleted

Это всё хорошо, но как можно программировать, не зная си? Разве что уровня формошлёпанья на бейсике/пачкале или php/js с недавних пор.

anonymous
()
Ответ на: комментарий от anonymous

Это всё хорошо, но как можно программировать, не зная си?

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

yyk ★★★★★
()
Ответ на: комментарий от Puzan

Указатель - это адрес

Но адрес не указатель. В микропроцессорах есть адреса, но указателей там нет. Нет никаких оснований считать, что указатели зайдут лучше после изучения микропроцессоров.

anonymous
()
Ответ на: комментарий от anonymous

Но адрес не указатель

Почему?

Нет никаких оснований считать, что указатели зайдут лучше после изучения микропроцессоров.

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

Puzan ★★★★★
()
Ответ на: комментарий от Puzan

Для всех, кто знал как работает компьютер,

Скорей всего, те кто знает как работает комп, основной язык программирования - Verilog. Я вот в универе изучал msc51. И, наверное, немного представляю как оно там работает. Проблема только в том, что этому ядру 40 лет в обед. И я честно, дупля не отбиваю, как работает современный проц с кешами, предсказателями переходов, виртуальной памятью и, хрен его знает чем еще.

Так что да, современная Сишечка, особенно поверх ОС, стоит от железа очень далеко.

anonymous
()
Ответ на: комментарий от Puzan

Почему?

А вы точно знаете, что такое адрес для процессора и что такое указатель в Си?

Давайте с попроще. Вот в асмах указателей нет, а в llvm есть. Попробуйте понять разницу между ними.

Но вообще современное железо вообще никак на модель си не походит.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.