×Закрыть

Сложный выбор между двумя специальностями

Доброго времени суток уважаемые форумчане!

Хочу спросить вашего мнения по вопросу над который размышляю уже несколько месяцев (еще до того, как зарегистрировался тут).
небольшая предыстория: мне 27 лет, поле окончания КПИ устроился работать по специальность, а именно инженером-электронщиком. Служебные обязанности — разработка «железа»: разработка электрических схем, трассировка печатных плат и т.п.

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

Так вот, первые год-два на своей работе я получал удовольствие, от того чем мне приходилось заниматься.
У нас в команде есть программист (по моему впечатлению — он программист от Бога!) и любые вопросы с написанием прошивок решает «как два байта переслать». Но время идет и я заметил, что уровень мое зарплаты мог бы быть существенно выше, если бы я мог не только отлаживать отдельные куски кода, а и написать прошивку полностью (спасибо, кэп). По этому я решил освоить программирование и записаться на курсы (самостоятельно уже скачал Visual Studio и успешно вывожу на консоль «Hello World»).

Суть моего вопроса: т.к я собираюсь изучать язык практически с нуля, то большой разницы пойти изучать С и Verilog для работы с МК и ПЛИСами оставаясь инженером-конструктором или изучить, например, С# и перейти в IT для меня нет.

IT более привлекательна зарплатами и бОльшим рынком вакансий, но в электронике у меня хотя бы есть опыт и наработки. Возможно (точнее, легко/сложно) ли после окончания курсов попасть на свою первую работу IT в 27 лет? Какой выбор Вы сделали бы в моей ситуации?

👍НравитсяПонравилось0
В избранноеВ избранном0
LinkedIn

Лучшие комментарии пропустить

Есть знакомый, до 30 катался санитаром на скорой. Потом начал программить, для себя, по фану. Затем устроился кодить уже оффициально.

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

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

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

Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Дуже рекомендую

1.CS50, від азів до складних програм на мові С, в дуже цікавій формі
Оригінал курсу: www.edx.org/...er-science-harvardx-cs50x
Український переклад: courses.prometheus.org.ua/...etheus/CS50/2016_T1/about

2. Embedded Systems — Shape The World, практичне програмування мікроконтроллера, від простого до складного, поки що це єдиний MOOC по embedded: www.edx.org/...-world-utaustinx-ut-6-03x

3.The Computing Technology Inside Your Smartphone, протягом курсу у їхньому симуляторі потрібно побудувати мікроконтроллер (спочатку на транзисторах створються логічні елементи, далі із них цифрові модулі шифратори, дешифратори,мультиплексори, із них складніші компоненти), розповідається про машинні коди, асемблер і звичайно С. Мені дуже сподобався цей курс:
www.edx.org/...one-cornellx-engri1210x-0

4. Real-Time Bluetooth Networks — Shape the World -Про цей курс поки що нічого сказати не можу, тому що він ще не почався, але його проводять викладачі з курс «2» (номер в цьому списку) тому впевнений що буде цікавим, залізо вже замовив тому чекаю на його початок:
www.edx.org/...-utaustinx-ut-rtbn-12-01x

Спасибо за ссылку на последний курс. Выглядит интересно

З нетерпінням чекаю початку курсу.

Пару месяцев назад мой друг, которому 32, стал Junior Java Developer-ом. Прошел несколько курсов самостоятельно, затем попал на одну из программ подготовки джунов, и успешно теперь получает в 2 раза больше, чем 7 лет до этого.

Надо понять, почему таки не шло программирование в школе/институте, иначе есть риск остаться программистом начальном уровня (по меркам ИТ компании а не института) навсегда, с соответствующим эффектом в зарплате. Для этого можно попробовать поучиться на бесплатных онлайн курсах (Coursera, Edx, или любых где есть контрольные задания). Если такие курсы не будут в тягость в вечернее время после основной работы — значит есть смысл перепрофилироваться. Вопрос же выбора языка вторичен и возможно его придется сменить по ходу карьеры, так что надо быть готовым, когда понадобится, выучить еще один язык. Язык стоит выбирать исходя из понимания круга задач, которые интересно решать. Разные курсы предлагают тестовые задания из разных областей, так что на это тоже стоит обратить внимание.

Наиболее вероятная причина — потому что слишком сильно увлекла электроника плюс уровень преподования. Как правило, если что — то сильно нравится, на все остальное забивают.

Якщо Вам цікава електроніка та низькорівневе програмування, можливо цей список Вас зацікавить: embedded.co.ua/...opportunities-in-cypress Вакансій багато, але крім знань цифрової та аналогової схемотехніки потрібні ще знання С....
Виникнуть запитання,пишіть.

Это у Cypress в Украине есть что-то?

Так, Cypress має офіс у Львові, працює біля 160 людей та розширюється.

А чем занимаетесь? Это связано с разработкой чипов или поддержка клиентов?

Забавно просто, у меня тим весь в Cypress попал в связи с покупкой IoT подразделени у Broadcom.

Розробка нових чіпів для різних клієнтів та клієнтська підтримка, розробка компонентів для цих чіпів ( PSoC не мають фіксованої периферії, функціонал задається компонентами). Automotive Solutions, розробка USB контроллерів, BLE, Fingerprint, CapSense, TrueTouch Touchscreen, є R&D відділ.

Про те що Cypress купив підрозділ Broadcom знаю.

Ничего так, прилично. Я думал ничего такого в Украине не

Учите английский язык, он на сегодня самый востребованный

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

С, и прям сразу С++
Это какой-то СНГшный перегиб, у нас на большую структуру engineering services, в которой около 120 человек, С знают все, а С++ знает 4 человека и ещё один морозится (пытается забыть)...

Аналогично. Человек 200 в бизнес юните software engineers, сплошной С.
С++ это скорее финансы и прочее

С тільки на перший погляд здається простою мовою, а чим більше із нею працюєш, тим більше відкриваєш нового для себе.
“Низкоуровневый язык — это когда требуется внимание к вещам, которые никак не связаны с программами на этом языке.” Alan J. Perlis

Язык — простой. Все сложности его применени не в самом языке.
Сравни например с С++, где сам язык сложный

посмотрел пару объявлений про курсы: С сам по себе не преподают. Только как первую ступень к языку С++. А это вариант искать работу и «под железо», и «формочки клепать» ))

Учите С.
Один знакомый, я так подозреваю, фигачил железо и под них писал софт. Ушел в тестировщики. Счастлив.
Есть знакомый, который знает С и фигачит прошивки под фотики. вроде Кэнон. Толи он софт пшет, толи прошивки. Счастлив.
Посмотрите в сторону программирования под Raspberry Pi. Умный дом. Для солнечных панелей прошивку/софт. Посмотрите, что на фрилансе есть. Я как-то делал товарищу из Лондона программку, которая лампочки светила. А тот товарищ фигачил прошивку и плату.
Меня бы жаба задавила не использовать железячные знания и не продавать их.
Однозначна программирование, но под железо, а не формочки клепать.

C# - отличный выбор, позволит познать все радости программирования. 27 лет — не много, но учится стоит скорей на Middle, ибо Junior разработчиком быть уже поздновато по мнению некоторых компаний. Советую почитать хорошую литературу, которая поможет не просто выучить язык, а понять что к чему в программировании.
Советую Шилдта, Макконнелла, Роберта Мартина и для базового понимания ООП — head first от oreilly. Никогда не переживайте о том, что в хорошей книге в примерах используется язык программирования, который Вы не изучали. Смысл везде тот же, ведь программировать нужно не на языке, а с использованием языка :]

спасибо за развернутые ответы!

Однозначно выбрал бы C#. Он намного универсальнее.
Проблема C — знания и опыт, полученные на одном проекте, сложно продать достойно при переходе на другой проект.
К тому же, IT компании предлагают условия работы намного комфортнее, чем не-IT.
Возраст вхождения в этой сфере особого значения не имеет, если иметь знания, но не поверхностные, а твердые и систематизированные.

IT более привлекательна зарплатами и бОльшим рынком вакансий
Только в странах третьего мира. В нормальных странах человек делающий руками электронику как раз больше зарабатывает...(Если конечно ты не преувеличиваешь свои знания, ну всмысле спаять там гирлянду)

т.к Украину покидать пока не собираюсь исходим из того, что есть)

Исходя из того что есть — то что больше нравится.

Чистое программирование дает больше денег в среднем по больнице, т.к. платежеспособностью обладают заказчики зарубежные, а код через границу тягать вестимо проще, чем железяки. Для этого я лично глядел бы на Java, который наиболее востребован в крупных (читай — нормальных) конторах, или на язык который лежит ближе к сердцу (Go/Python/Ruby).

Железячное приносит больше когда есть опыт — но меньше на старте и сложней найти место. Опять же, даже при желании особо не пофрилансишь.

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

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

Ой блин, на фантазируй себе резюмеху и иди мидлом на C-шную вакансию.

незнав що це таке розповсюджене явище, поки не прийшлось набирати команду :(

Мене дивує як можна займатися електронікою не вміючи програмувати хоча б на С під якийсь МК(Стосуєтеся чисто України). Невже десь потрібен інженер-електронік без вміння писати код?

Например у нас в компании я сталкивался только с такими, которые не знают

Есть знакомый, до 30 катался санитаром на скорой. Потом начал программить, для себя, по фану. Затем устроился кодить уже оффициально.

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

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

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

Ключевой момент в вашем посте —

Потом начал программить, для себя, по фану

Автора, я так понимаю, программирование совершенно не вставляет.

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

на каждом шагу выскакивают сообщения об ошибках
Compiler Error Driven Development?

говорил про ошибки при компиляции... (...если об этом было уточнении, я не в теме)

Да, мой коммент именно об этом.

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

где-то так и будет) Курсы займут 3-4 месяца...

А вы ардуину пробовали? Raspberry и ему подобные борды?
У меня была точно такая же проблема как и у вас. Електронщик по образованию, програмы писал в универе для зачета, без особого ентузиазма вобщем, проработал 2 года(во время учебы) на СCTV и домофонах(ремонт и все такое), понял что без програмирования железа дальше ремонтов особо то и не пойдешь. Пошел в андроид трейни, учил джаву. Попалась как то в руки малинка, с ней уже пришло понимание как аналоговая електроника работет с цифровой. Потом ардуинка(многие проходят путь от ардуины к бордам, но у меня так вот сложилось). Потом ARM(Stm32), с регистрами, блекджеком... короче опускался ниже. Причем с распбери игрался на питоне, с ардуинкой на мутном С, ну и стмка уже чистый С. Как то так. В общем главное с чего то начать. Я бы рекомендовал все таки с ардуинки — подергать ножкой, словить нажатие кнопки, посмотреть как работает ШИМ, потом уже остальное(SPI, i2c ну и глубже глубже). Но поверьте оно само дальше пойдет как только разберетесь с примитивными возможностями контроллера.

с Ардуино, точнее с Фандуино, я знаком.
С задачами «подергать ножкой», написать прерывание я сталкиваюсь на работе)
С интерфейсами, ШИМ, ГИ, операционниками и прочим я знаком более детально.
Приятно, что моя проблема не новая и есть люди, которые с ней в свое время справились)

Так а что вам, простите не хватает, не совсем понятно, если честно?
Если хотите делать аля фулстек под хардвер, могу еще посоветовать обратить внимание на Qt. Забористая штука. Там бареметал, и клиенты писать можно, компиляторы на все платформы, даже на мобильные. Считай одной тулзовиной решаете все. Есть своя специфика по владению именно qt компонентами, но она довольно быстро осваивается.

Я бы посоветовал прежде всего ответить самому себе на вопрос а чем вы хотите заниматься.

Разработка схем и трассировка плат — здесь достаточно низкий потолок и вы его скорее всего достигли. В первую очередь решить будете ли вы работать в той же области или сменить её.
Если работать в той же области, то нарабатывать дополнительные навыки. С и Verilog здесь подойдёт.

Одно насчёт С и Verilog — это достаточно простые языки, понимание их придёт быстро. Основная проблема в том, что нужно знать и уметь много вокруг. Например RTOS, как работает процессор, прерывания, исключения и т.п. Но это сесть и выучить не получится, надо с этим работать. Попытайтесь найти как это можно начать делать на текущей работе.
Потом я не понимаю выбора Visual Studio. Что вы такое пишете, зачем это?

Visual Studio
потому,что начал с С++ и С#

Возможно стоит найти компромисс?
Изучая С — Вы поднимете навыки программирования.
Область применения С больше чем МК — на нем написан Redis & Linux & Git. (думаю сами знаете, но ограничиваете себя).

Какой выбор Вы сделали бы в моей ситуации?
Пошел бы изучать С и поставил срок себе и руководителю — что за пол года я подтягиваю С до уровня самостоятельно написание «прошивок» — а руководитель увеличивает вознаграждения до устраивающего меня уровня.
Выделил бы 5-6 часов в неделю — посмотрел бы открытые GitHub проекты на С нашел бы интересный и попытался разобраться в нем — это дало бы плюс при основном изучении языка (курсы) и дополнительный плюс — если успешно внесу изменений в проект которым пользуют другие.
Есть возможность что проекты будут сложными — тогда придумать свою легкую задачу для реализации на С (github.com/antirez/kilo) — в идеале написать тесты, добавить анализаторы кода.
Выбор достаточно большой, если все же выберешь подобный вариант — пишу, возможно что-то подскажу.

Учиться уже поздновато, просто ищи где начинать работать. И соответственно эти знания приобретать.
Почему так: в этом возрасте просто с обучением уже не возьмут. Потребуют опыт работы. А просто с опытом — запросто, тем более что формально обучение уже есть.

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

Я бы шёл в узкую, выбирая какой-нить проект Internet of things. Но для этого надо находиться в Киеве, другие регионы пока не готовы похвастать количеством украинских стартапов в этой сфере. И соответственно учить то, что используется в проекте — угадать это практически нереально.

Немного поддержу с конкретикой IoT — www.youtube.com/...utSs745o&feature=youtu.be
Можно к тому же Боре обратиться — он не откажет, может к себе в лабу и возьмет.

Глянул. Видео интересное, действительно за этим будущее. Потом зашел на сайт его компании Ciklum в раздел вакансий и там нужны: программер, программер, программер, программер, ... а и еще программер.
Где же тот стык с электроникой, о котором говорит Борис в видео?
Хотя может у него несколько компаний

Тут стоит почесаться чуть больше, чем просто почитать вакансии :)
1. Отправить резюме в Циклум просто так
2. В комментах к видео попытаться связаться с Борей и выяснить возможности и перспективы

PS: Это не так сложно, как кажется.

Короткий век однако у программистов, если 27 это поздно...

Поздно приходить на работу, когда за плечами только учёба. В этой стране HR не пропустит, независимо от того может ли человек работать. Издержки местной папуасии.

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

а можно узнать когда это было?

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

Немного собственного опыта добавлю.
Нужно заниматься тем, что нравится и не смотреть на деньги. Потому что если нравится электроника и девайсы — то нужно развиваться именно в эту сторону, т.е. Verilog, VHDL, Assembler, C.... Лучше стать хорошим электронщиком + писать прошивки под свои девайсы, чем стать еще одним средним «богатым программистом на С#» и заливать скуку смузи.
PS: Сам пытался заняться программированием, но каждый раз при написании чего-то сложнее «Спросил 2 числа, вывел результат сложения» на меня накатывала необоримая скука. В какой-то момент понял, что это — не мое и ушел немного в смежную специальность.

Это сложно не смотреть на деньги. Слишком уж много на них подвязано.

Я бы сказал в первую очередь нужно знать себя. Есть люди которые просто не могут заставить себя работать если нет интереса. У них выбора нет по большому счёту. Тут только что нравится.
А есть не настолько категоричные, тут уже критерием может быть лишь бы не противно :)

Если заниматься тем делом, которое нравится — деньги будут. Мир — довольно большая штука. Хоть могилы копай — будут деньги :)

слишком уж категорично

Да нет.... Тут вопрос не в черное-белое, а просто в том, что всегда можно найти покупателя на свое любимое дело :) И про «всегда» я не шучу и не утрирую.

Хоть могилы копай
свежие :)

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

Может программирование вообще не ваше? И стоит подумать над кардинальным изменением карьеры?

наверное я не из тех, кто верит что одной любви к какой-то сфере деятельности достаточно. у меня есть 1-2 хобби, но они не монетизируются.

VoIP. Телефония + сисадминство :)

А почему бы не посмотреть на деньги?
Обязательно жить от зарплаты до зарплаты или в долг?

т.к я собираюсь изучать язык практически с нуля, то большой разницы пойти изучать С и Verilog для работы с МК и ПЛИСами оставаясь инженером-конструктором или изучить, например, С# и перейти в IT для меня нет.
Есть же разница! Выучив С и разбираясь в железе, ты вдвойне ценный специалист, а для С# весь предидущий опыт будет бесполезен.

Чувак, если тебе нравится ковырять железо........то нужно заниматься тем, что нравится.
Если собрался менять специальность и «ломать» себя, только потому что тут БАБЛО.......то лучше бы ты шел учиться на дантиста......там его БОЛЬШЕ :)

Программирование тоже понравится. А канифолью подышать можно в свободное от основной рабты время.

канифоль не так страшна, а вот свинцовый припой....
пока еще не все на RoSH перешли((

А я и не говорю что канифоль это что — то плохое... Как раз наоборот)))

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

Сложный выбор между двумя специальностями
Тема высосана из пальца....... Ни хрена тут сложнава нет.......или нравится и ты видишь что это твое или нет :)))) Пиарить себя тут постами......ай что же мне делать и дайте же мне решение для вайтивайти выглядит просто у60го :)))
т.к я собираюсь изучать язык практически с нуля, то большой разницы пойти изучать С и Verilog для работы с МК и ПЛИСами оставаясь инженером-конструктором или изучить, например, С# и перейти в IT для меня нет.
Какой выбор Вы сделали бы в моей ситуации?
ну вот лично мне сишечка интеерсует больше, чем сишарп)
Ибо:
1. один из двух основных языков системного программирования (наравне с с++) да и прикладного тоже (нмного линуксового софта насколько знаю написано именно на Си, например, редактор/IDE Geany),
2. в Си можно встраивать скрипты на Python, Lua и др. скриптовых языках.
3. изучив Си думаю будет легче освоить си-шарп (языки то родственные) и другие си-подобные языки..
4. есть мнения (видел в интырнетах), что Си относительно простой язык.

Хотя сишарперу/дотнетчику найти работу наверное пожалуй будет легче, чем сишнику.

з.ы. и ИМХО для Си вижуал студия не нужна — можно обойтись и более легковесными средами, такими как например Dev-C++, Falcon C++ или Geany. А вот для Си-шарпа вижуал студия — то, что доктор прописал (хотя есть и монодевелоп).

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

я написал

мне сишечка интеерсует больше, чем сишарп
и перечислил, почему мне интересен Си.

Какое отношение эти пункты имеют к си-шарпу? (кроме 3-его про родственность языков)

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

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

какой недостаток? то, что в программу на Си можно встроить скрипт на питоне?
Как по мне так это скорее плюс (минусом было бы, если бы такое было невозможно). Хотя конечно у каждого свое мнение на этот счет будет.
p.s. можно еще подойти и с другой стороны — написать на Си какое-нибудь расширение для питона, пхп или др. языка (например, пхп-фреймворк Phalcon). Вот разве что под дот.нет вряд ли.
P.P.S. вышесказанное не отрицает того, что на шарпе можно написать почти все, что душа пожелает (в рамках .NETа), например, модуль/расширения для языка, который поддерживается дот.нет фреймворком (F#, IronPython, IronScheme, да и упомянутая мной Lua тоже имеет реализацию под дот.нет).

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

Правильно. Язык должен быть очень большим, чтобы покрыл все случаи использования. Чем больше тем лучше .

язык не покрывает все задачи и нужно делать вставки на других языках
ИМХО покрывает. Просто это сделано для того, чтобы увеличить скорость разработки в тех местах кода, где скорость исполнения не принципиальна. А так думаю можно и весь код на си написать. Просто наверное редко кто сейчас так делает при современных мощностях компов и дэдлайнах.
на самом деле костыль
ну так в С++ тоже такой же костыль есть) (в смысле в плюсы тоже мождно встраивать код на скриптовых языках). И это при том, что всеми любимая винда написана (часть кода по крайней мере) на плюсах. Да и многие виндовые проги тоже на плюсах писаны.
Так что даже если это и костыль, то наверное все-таки полезный, раз на С/С+ до сих пор пишут)
это достоинство не си, а просто другие языки понимают модули написанные на других языках
это просто потому, что многие другие языки сами написаны на Си)
покрывает. Просто это сделано для того, чтобы увеличить скорость разработки в тех местах кода, где скорость исполнения не принципиальна. А так думаю можно и весь код на си написать. Просто наверное редко кто сейчас так делает при современных мощностях компов и дэдлайнах.
"я хожу пешком и меня все устраивает, я могу добраться до любой точки мира, но когда мне надо быстро куда-то добраться я еду на машине" а я предпочитаю сразу ехать на машине, а не мучаться пешком
ну так в С++ тоже такой же костыль есть) (в смысле в плюсы тоже мождно встраивать код на скриптовых языках). И это при том, что всеми любимая винда написана (часть кода по крайней мере) на плюсах. Да и многие виндовые проги тоже на плюсах писаны.Так что даже если это и костыль, то наверное полезный, раз на С/С+ до сих пор пишут)
все костыли полезные или ктобы бесполезные ставил?)
это просто потому, что многие другие языки сами написаны на Си)
не поэтому

ну так правильно для каждй задачи свой инструмент — для одной задачи достаточно ног, для другой уже желателен/необходим автомобиль/пароход/самолет/космический корабль. Если человек любит ездить в булочную на такси — его право)
Иначе все программисты поголовно писали бы на С# или Джаве)

точно, только странно получается когда в одной задаче, надо несколько языков

да, странно, что для написания, например, веб-сайта обычно надо использовать и пхп/питон/руби/джаву/сишарп, и джаваскрипт, и sql — ужос)

это три задачи: хранилище, сервис и клиентское приложение

если ты написал сервис на си, а к нему идет сайт на чем угодно это не включение лау скриптов в си код

Это подзадачи одной задачи (например, задача написать интернет-магазин).

ну аналогично, например — задача написать какую-нибудь игрулину:
Подзадачи: 1. написать основную часть игры (С/С++ ну или юнити c сишарпом) , 2. нарисовать графику для игры (фотошоп, 3дмакс, что-то еще), 3. написать различное управление и т.д. для игры (какой-нить скриптовый язык: UnrealScript, Python, Lua, тысячи их), 4. написать базу данных игры с использованием какой-то субд (тобишь хранилище).
-
Ну и конечно все это обычно пишут разные чуваки. Например, один пишет код на си, другой на питоне + интегрирует этот код в си, третий линкует это все с базой данных. Ну я так понимаю.

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

да и насчет включения скриптов в код — можно ж ведь написать сайт одном пхп файлом, в который впихнуть и джаваскрипт и css если уж на то пошло)))

З.Ы. я ж не думаю, что ты представляешь встраивание питон-скрипта в Си код как написание питоновского кода прямо в си-файле))

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

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

Чтобы напугать — вызов по позднему связыванию комвизибл шарпового метода из плюсов как idispatch:
try
{
CFiscalDocType fiscalDocType;
if (!fiscalDocType.CreateDispatch(_T("{61D92709-507A-47BB-A041-E9726471B8F5}")))
{
TraceError(__FILE__, __LINE__, _T("Receipt"), _T("Create dispatch returned error (GetFiscalDocType())!"));
return −1;
}

long ret = fiscalDocType.GetDocType(sDescription);

TraceMessage(__FILE__, __LINE__, _T("Receipt"), _T("GetFiscalDocType(%s) => %ld"), (LPCTSTR)sDescription, ret);

return ret;
}
catch (COleDispatchException)
{
TraceError(__FILE__, __LINE__, _T("Receipt"), _T("OleDispatch throw exception!"));
return −1;
}

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

возможно в сишарпе подобных костылей действительно нет) но си-шарп все равно не является «идеальным языком для всего и вся» (т.е. у си-шарпа наверняка есть свои недостатки, из-за которых пишут не только на нем).

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

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

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

Ааа ну не странно... «Oracle» — это все объясняет, JIT же быстрый... «Сейчас подожди еще немножко и я покажу какой он быстрый...»

страшно представить что именно тебе это объясняет

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

Предлагаю простое пари:

Вот исходник sourceforge.net/...aster/tree/lib/gosthash.c , я сейчас сделаю из него тестовое приложение, компилировать буду с опциями -O (т.е. без никакой оптимизации).

От вас надо переписать это приложение на с# - трудностей быть не должно больших. Идёт?

pastebin.com/rxkGkgVL

1. gcc -m32 -O0 mh_gost.c
93 hashes/sec, 18.600000 Mb/sec
117 hashes/sec, 23.400000 Mb/sec
116 hashes/sec, 23.200000 Mb/sec
117 hashes/sec, 23.400000 Mb/sec
116 hashes/sec, 23.200000 Mb/sec

2. gcc -m32 -O1 mh_gost.c
189 hashes/sec, 37.800000 Mb/sec
235 hashes/sec, 47.000000 Mb/sec
235 hashes/sec, 47.000000 Mb/sec
236 hashes/sec, 47.200000 Mb/sec
235 hashes/sec, 47.000000 Mb/sec

3. gcc -m32 -O2 mh_gost.c
183 hashes/sec, 36.600000 Mb/sec
228 hashes/sec, 45.600000 Mb/sec
227 hashes/sec, 45.400000 Mb/sec
228 hashes/sec, 45.600000 Mb/sec
228 hashes/sec, 45.600000 Mb/sec

4. gcc -m32 -O3 mh_gost.c
185 hashes/sec, 37.000000 Mb/sec
231 hashes/sec, 46.200000 Mb/sec
231 hashes/sec, 46.200000 Mb/sec
231 hashes/sec, 46.200000 Mb/sec
232 hashes/sec, 46.400000 Mb/sec

5. gcc -m64 -O0 mh_gost.c
91 hashes/sec, 18.200001 Mb/sec
113 hashes/sec, 22.600000 Mb/sec
112 hashes/sec, 22.400000 Mb/sec
113 hashes/sec, 22.600000 Mb/sec
113 hashes/sec, 22.600000 Mb/sec

6. gcc -m64 -O1 mh_gost.c
187 hashes/sec, 37.400002 Mb/sec
234 hashes/sec, 46.799999 Mb/sec
233 hashes/sec, 46.599998 Mb/sec
233 hashes/sec, 46.599998 Mb/sec
233 hashes/sec, 46.599998 Mb/sec

7. gcc -m64 -O2 mh_gost.c
202 hashes/sec, 40.400002 Mb/sec
252 hashes/sec, 50.400002 Mb/sec
253 hashes/sec, 50.599998 Mb/sec
251 hashes/sec, 50.200001 Mb/sec
252 hashes/sec, 50.400002 Mb/sec

8. gcc -m64 -O3 mh_gost.c
208 hashes/sec, 41.599998 Mb/sec
260 hashes/sec, 52.000000 Mb/sec
258 hashes/sec, 51.599998 Mb/sec
260 hashes/sec, 52.000000 Mb/sec
259 hashes/sec, 51.799999 Mb/sec

Тесты с 1-4 — x32
Тексты с 5-8 — x86_64

# gcc —version
gcc (Ubuntu 4.8.4-2ubuntu1~14.04.3) 4.8.4

# uname -a
Linux mikenfs 3.13.0-88-generic #135-Ubuntu SMP Wed Jun 8 21:10:42 UTC 2016×86_64×86_64×86_64 GNU/Linux

# cat /proc/cpuinfo
processor       : 0-7
vendor_id       : GenuineIntel
cpu family      : 6
model           : 30
model name      : Intel(R) Core(TM) i7 CPU         860  @ 2.80GHz
stepping        : 5
microcode       : 0x4
cpu MHz         : 1199.000
cache size      : 8192 KB
physical id     : 0
siblings        : 8
core id         : 0
cpu cores       : 4
apicid          : 0
initial apicid  : 0
fpu             : yes
fpu_exception   : yes
cpuid level     : 11
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm sse4_1 sse4_2 popcnt lahf_lm ida dtherm tpr_shadow vnmi flexpriority ept vpid
bogomips        : 5585.82
clflush size    : 64
cache_alignment : 64
address sizes   : 36 bits physical, 48 bits virtual
power management:

4 ядра + 4 HT ядра

Десктопная рабочая станция
Vendor: Hewlett-Packard
Version: 786H1 v01.05
Release Date: 06/09/2010

16Gb DDR3-1333MHz onboard.

unsigned int l, r, t, key[8], u[8], v[8], w[8], s[8];
v[1] = h[1] ^ (u[2] << 16) ^ (u[1] >> 16)
То неловкое чувство, когда ощущаешь необходимость проверить свой pet-код на наличие «сенсорно очевидных» переменных типа a, b, c...

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

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

Зачем вообще вникать в этот код??? В С# те же bitwise операторы, что и в С. Те же базовые типы. Я специально взял код ГОСТ хэша из библиотеки mhash как самого похабного алгоритма, который мало того, что не паралелизуется, так он ещё вызывает ацкие простои в суперскалярном ядре из-за постоянных операций на предыдущих значениях, и в котором используются не указатели, а обращение к элементам массивов, чтобы убрать все сложности с портированием. Я постарался подойти максимально честно к этому пари (в другом случае я бы выбрал другой алгоритм и заведобо бы ждал разгромного выигрыша С).

Т.е. вы предлагаете «перепечатать» код в C#? Тогда в чем пари?
Этот код, например, делает то же что и ваш? habrahabr.ru/post/188152

Тогда в чем пари?
Мерямся качеством кодогенератора.

Statement1. Зачастую код на шарпе быстрее кода на си
Statement2. В условиях неизвестности хороший код на шарпе быстрее хорошего кода на си.

Я не верю в это категорически. Я ожидаю скорость С# на 10-15% ниже чем -O0 у gcc.

А, понятно) Ну тут думаю речь шла не о скорости одного-и-того-же-кода, а скорее в скорости кода, который соответствует определенному тех.заданию.
Т.е. нам, например, надо разгрузить вагон песка.
Один язык программирования позволяет делать это только 1 грузчиком. А другой — сотней. Нет смысла сравнивать оба языка по скорости разгрузки вагона одним грузчиком. Так как единственный грузчик 1-го языка вполне может оказаться быстрей (так как у него опыта больше), чем один рандомный из сотни грузчиков второго языка.

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

Ну да, пи$деть — не мешки ворочать %) Жаль, подождём следующего фаната С#...

Ну да, пи$деть — не мешки ворочать %)
надо быть совсем отбитым чтобы для любого чувака из инета код писать чтобы доказать ему что-то, какая мне разница что у тебя там за мнение, к тому же это не языком сравнение будет, а кто оптимальнее напишет, ну обойду я тебя, например, и толку с того? для тебя все равно си останется быстрее, я когда джуном был фор с форычом сравнивал с другим джуном: оба написали варианты в обном случае фор быстрее, в другом форыч, вот ты аналогичное предлагаешь, но я уже не джун, тебе интересно — занимайся этим бредом, мне не интересно
Жаль, подождём следующего фаната С#...
я не фанат

Всегда хотел спросить, зачем .NET Black Belt в Oracle, если он Java купил?

Наследство по-ходу. Ну когда нанимаешь джава девелопера — тебе дают двух сишарперов в нагрузку.

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

Чего только оракл не купил

а кто оптимальнее напишет
Тебе уже всё написали — опытному сишарперу подправить тот код — пол часа неспешной работы.
ну обойду я тебя, например, и толку с того?
Я признаю нового бога.
когда джуном был фор с форычом сравнивал с другим джуном: оба написали варианты в обном случае фор быстрее, в другом форыч, вот ты аналогичное предлагаешь
Аналогичное — это ++i vs i++. Походу ты даже не понял, что я предлагаю.
Тебе уже всё написали — опытному сишарперу подправить тот код — пол часа неспешной работы.
плати, напишу все что хочешь
Я признаю нового бога.
мне что с этого?
Походу ты даже не понял, что я предлагаю.
все я понял, только зря развернуто написал, весь смысл вот тут «тебе интересно — занимайся этим бредом, мне не интересно»
И это при том, что всеми любимая винда написана (часть кода по крайней мере) на плюсах
Пожалуйста, не говорите такого в моём присутствии. Ядро и оконка(которая тоже прибита гвоздями к ядру — привет Руссиновичу и его попыткам замутить minwin) написано на С. Сверху как интерфейс для типа прикладухи winapi, который тоже C. И только сверху mfc, который очень виндузятный С++. А ещё сверху ATL, который обобщенно-орентированный С++. И где-то рядом и чуть-чуть сверху WTL, который поделка мелкомягких прогеров и неоффишиал. И сбоку OLE, COM, COM+, MTS. И рядом над этим сбоку дотНЕТ. А сверху него Сшарп.
Я могу долго жаловаться. Но. Вывод: винда написана на неоднородном костыльно-ориентированном языке программирования, который частично компилится cl.exe

Вообще , я так понимаю все эти вольготности по поводу ЯП — хочу вот это(ПЫТОН), а вот то (С#) круче чем это (C++), уже давно не канают....

В Апреле устроился на новую работу на вакансию С++ dev.
По факту месяц писал на жаба-скрипт, сейчас на unmanaged С# и колупаюсь в С хедерах.

Интересно что было бы, если бы я сказал ПМу — гоните мне проект на чистом С++ и не й*бет !!!!

простите, а что такое унменеджед сишарп? типа:
[DllImport("user32.dll“, EntryPoint = “MessageBox”, CharSet = Unicode)] int msg(void* hWnd, wchar_t* lpText, wchar_t* lpCaption, unsigned int uType);

in main() {msg( 0, _T("hi dou!"), _T("a window"), 0 );}

???

простите, а что такое унменеджед сишарп?

Говоришь менеджеру «Иди н**» и спокойно пишешь аппликуху на С шарпе.
Это и есть unmanaged C#

Не только менеджеру, но и заказчику.

Якщо в універі не зацікавило, то чисто заради зарплати не варто починати. Гроші це стимул, але він діє лише перший час.

Разбирающиеся в embedded development могут претендовать на такую же или более высокую заработную плату, как и C#-разработчики; просто потому что их меньше :)
То есть проблема не является дихотомией: или инженер-конструктор с C/Verilog, или C#-формошлёп.

И работы меньше, поэтому далеко не факт

Ну извините, это real life. Гарантий про $X/mo дохода никто не даёт, вне зависимости от выбора сферы деятельности.

Прочтите вашу первую фразу о том, что претендовать потому что их меньше. Она не имеет смысла. Моё замечание о меньше работы это к тому

Суть моего вопроса: т.к я собираюсь изучать язык практически с нуля, то большой разницы пойти изучать С и Verilog для работы с МК и ПЛИСами оставаясь инженером-конструктором или изучить, например, С# и перейти в IT для меня нет.
ну раз нет разницы, то какая разница?
Возможно (точнее, легко/сложно) ли после окончания курсов попасть на свою первую работу IT в 27 лет?
нелегко не зависимо от возраста
Какой выбор Вы сделали бы в моей ситуации?
умею и то, и то, микроконтроллеры для меня тоска смертная — выбор очевиден

все в итоге упрется в Вас. Если программирование Вам понравится и Вы найдете для себя то что доставляет удовольствие, то все норм.
Если этого не произойдет, по той или инной причине, то будете страдать )

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