Перед мной стал вопрос в каком направлении далее развиватся. Дело в том, что одно время я программировал в комманде C# разработчиков, а через какое-то время перешел на С/С++, системное программирование, разработка драйверов.
Это был как переход из одного мира в другой, где смысл и приоритеты в жизни координально отлчичаютя друг от друга. Что было очень важно в высокоуровневом программировании, стало абсолютно неважным в низкоуровневом и наооборот.
Так в разработке приложениий под NET или вообщем прикладных приложений очень важно знать: паттерны проэктированния, уметь рисовоть UML диаграмы; писать i++, а не ++i, не atoi() a int.Parse() и т.п, так как главное в коде красота, элегантость, понятливость. В более низкоуровневом программировании про паттерны книжки никто не читает, т.к. знать внутреннее устройство ОС и понимать ее функционирование здесь более важно; необходимо думать об управлении памятю; использовать ++i, вместо i++, т.к. это сэкономит пару тактов процессора.
И вот, собсетвенно, вопрос: какое выбрать для себя направление, как основное, в чем дальше углубляться, в драйвера и системное программирование или в прикладное? Этот вопрос я задаю именно в форум "О работе" потому, что этот вопрос интересен мне в первую очередь с этой точки зрения. Насколько мои навики в той или иной области будут востребованы, в какой из области я в будующем смогу получать лудший доход, став специалистом в ней?
Здравствуйте, StreamT, Вы писали:
ST> И вот, собсетвенно, вопрос: какое выбрать для себя направление, как основное, в чем дальше углубляться, в драйвера и системное программирование или в прикладное? Этот вопрос я задаю именно в форум "О работе" потому, что этот вопрос интересен мне в первую очередь с этой точки зрения. Насколько мои навики в той или иной области будут востребованы, в какой из области я в будующем смогу получать лудший доход, став специалистом в ней?
В системном программирование выше job security, но значительно меньше работы. И платят в Москве не выше среднего в данный момент.
Лучше заниматься и тем и другим, в плохие времена писать драйвера, а в хорошие — клепать на С++, Java, C#. Знания ОС просто не могут устареть в принципе, по сравнению со свежим чуваком у тебя всегда будет очень большое преимущество, поскольку ты уже все знаешь и можешь сразу работать. В прикладном программировании такого нет.
Тут правильно сказано — программисты драйверов нужны редко, но профи платят им в среднем от $3000-4000.
Явщикам судя по всему за "штамповку" на обороте платят много — там $2000-3000
А С++ никам — которые пишут базовые вещи, которые потом оборачивают в яву, шарп или еще что — платят не так много, так как их проекты не для потока... тут — до $2500
Здравствуйте, Smetanin, Вы писали:
S>А цели какие? Уточняющий вопрос: кем ты себя видишь (хотел бы быть) в идеале через два года? Через пять, десять лет?
Ваш вопрос заставил меня хоршенько подумать и на него сложно однозначно ответить. В будующем я хотел бы и дальше программировать, решать сложные и интерестные задачи, вне зависимости от языка, платформы, технологии. Главное — что-бы было интерестно. В данный момент мне интерестно изучать программирование драйверов под Windows, хотя, к сожалению, мое текущее задание на работе с этим совсем не связано, поэтому не могу сразу применять полученные знания на практике
Здравствуйте, StreamT, Вы писали:
ST> Это был как переход из одного мира в другой, где смысл и приоритеты в жизни координально отлчичаютя друг от друга. Что было очень важно в высокоуровневом программировании, стало абсолютно неважным в низкоуровневом и наооборот.
Take it easy!
Жизнь полна более приоритетных вещей, чем программирование (низкоуровневое или высокоуровневое). Надо работать ради жизни а не жить ради работы.
ST> И вот, собсетвенно, вопрос: какое выбрать для себя направление, как основное, в чем дальше углубляться, в драйвера и системное программирование или в прикладное? Этот вопрос я задаю именно в форум "О работе" потому, что этот вопрос интересен мне в первую очередь с этой точки зрения. Насколько мои навики в той или иной области будут востребованы, в какой из области я в будующем смогу получать лудший доход, став специалистом в ней?
Как уже здесь говорили, низкоуровневых программистов требуется на несколько порядков меньше чем высокоуровневых. Поэтому, добиться успехов условно говоря в "драйверах" гораздо сложнее чем в прикладных областях. Второе, это перспективы. В низкоуровневом программировании они выглядят так: программист — хороший программист — гуру. Все, дальше, куда бы ты не рос с программированием придется покончить.
У прикладников линейка развития подлиннее, потому что их больше и есть необходимость выстраивать управленческую пирамиду: программист — старший программист — ведущий программист. Далее развилочка — либо в управленцы либо в технари. Управленцы это: team lead — project manager — product (program) manager — CEO. Технари это: team lead — designer — architect — expert — CIO (не всегда). Причем вплоть до планки "expert" всегда есть возможность поковыряться в коде.
Здравствуйте, StreamT, Вы писали:
ST>Здравствуйте, Smetanin, Вы писали:
S>>А цели какие? Уточняющий вопрос: кем ты себя видишь (хотел бы быть) в идеале через два года? Через пять, десять лет?
ST>Ваш вопрос заставил меня хоршенько подумать и на него сложно однозначно ответить. В будующем я хотел бы и дальше программировать, решать сложные и интерестные задачи, вне зависимости от языка, платформы, технологии. Главное — что-бы было интерестно. В данный момент мне интерестно изучать программирование драйверов под Windows, хотя, к сожалению, мое текущее задание на работе с этим совсем не связано, поэтому не могу сразу применять полученные знания на практике
Какие цели — такой и ответ, собственно.
Если цель — карьерный рост, то надо идти туда, где больше народа (в прикладное программирование в больших конторах). При этом отдавать себе отчет, что карьерный рост подразумевает менеджмент с уходом от программирования.
Если цель — средние деньги и стабильность, то куда-нибудь в крупный банк.
Если надо много денег прямо сейчас — надо идти САП внедрять.
А если надо, чтобы было интересно — надо идти туда, где интересно.
Здравствуйте, StreamT, Вы писали:
ST> Перед мной стал вопрос в каком направлении далее развиватся. Дело в том, что одно время я программировал в комманде C# разработчиков, а через какое-то время перешел на С/С++, системное программирование, разработка драйверов. ST> Это был как переход из одного мира в другой, где смысл и приоритеты в жизни координально отлчичаютя друг от друга. Что было очень важно в высокоуровневом программировании, стало абсолютно неважным в низкоуровневом и наооборот.
А в чём ещё дело, кроме как в нижеследующем?
ST> Так в разработке приложениий под NET или вообщем прикладных приложений очень важно знать: паттерны проэктированния, уметь рисовоть UML диаграмы; …
Как-то ты не с той стороны подошёл к паттернам. NET, Java или PHP — писать программы _правильно_ надо на любом языке и для люьбых целей. Ни за что не поверю, что при написании драйвера не наёдётся применения Singleton-у или там IoC.
ST>…писать i++, а не ++i, не atoi() a int.Parse()
Здесь уже верно, так как особенности языка\платформы.
ST>и т.п, так как главное в коде красота, элегантость, понятливость.
Задумайся? Зачем в коде на C# или на VB красота? ИМХО, просто потому, что красота должна повсюду нас окружать и на C#, например, она достигается очень не сложно. Но быть такого не может, что бы на C++ это было бы невозможно. Тут я не большой спец, но уверен, что меня поддержат в том, что существует не мало отлично архитектурно продуманных и достойно реализованных библиотек на этом языке.
ST>В более низкоуровневом программировании про паттерны книжки никто не читает, …
Это трудности отдельно взятых людей. Возможно, свой код они просто ни с кем не делят или не привыкли\не умеют это делать. Но при написании чего-то, что будет использоватьлся не тобой а неизвесно кем, этот номер (с игнорированием паттернов и других правил хорошего тона) завершится фиаско.
ST>т.к. знать внутреннее устройство ОС и понимать ее функционирование здесь более важно; необходимо думать об управлении памятю; использовать ++i, вместо i++, т.к. это сэкономит пару тактов процессора.
Ну что поделаешь, в любой работе есть трудности.
ST> И вот, собсетвенно, вопрос: какое выбрать для себя направление, как основное, в чем дальше углубляться, в драйвера и системное программирование или в прикладное? Этот вопрос я задаю именно в форум "О работе" потому, что этот вопрос интересен мне в первую очередь с этой точки зрения. Насколько мои навики в той или иной области будут востребованы, в какой из области я в будующем смогу получать лудший доход, став специалистом в ней?
В той, в которой _сможешь_ отлично себя проявить. Для этого придётся учиться и много стараться. А для этого придётся любить свой труд. Значит, надо просто выбрать то, от чего получаешь большее удовлетворение.
Help will always be given at Hogwarts to those who ask for it.
Здравствуйте, stump, Вы писали:
S>У прикладников линейка развития подлиннее, потому что их больше и есть необходимость выстраивать управленческую пирамиду: программист — старший программист — ведущий программист. Далее развилочка — либо в управленцы либо в технари. Управленцы это: team lead — project manager — product (program) manager — CEO. Технари это: team lead — designer — architect — expert — CIO (не всегда). Причем вплоть до планки "expert" всегда есть возможность поковыряться в коде.
Линейка развития зависит лишь от организационной структуры конторы. А продвижение по линейке — от возможностей отдельных индивидов.
Здравствуйте, StreamT, Вы писали:
ST> Перед мной стал вопрос в каком направлении далее развиватся. Дело в том, что одно время я программировал в комманде C# разработчиков, а через какое-то время перешел на С/С++, системное программирование, разработка драйверов. ST> Это был как переход из одного мира в другой, где смысл и приоритеты в жизни координально отлчичаютя друг от друга. Что было очень важно в высокоуровневом программировании, стало абсолютно неважным в низкоуровневом и наооборот. ST> Так в разработке приложениий под NET или вообщем прикладных приложений очень важно знать: паттерны проэктированния, уметь рисовоть UML диаграмы; писать i++, а не ++i, не atoi() a int.Parse() и т.п, так как главное в коде красота, элегантость, понятливость. В более низкоуровневом программировании про паттерны книжки никто не читает, т.к. знать внутреннее устройство ОС и понимать ее функционирование здесь более важно; необходимо думать об управлении памятю; использовать ++i, вместо i++, т.к. это сэкономит пару тактов процессора. ST> И вот, собсетвенно, вопрос: какое выбрать для себя направление, как основное, в чем дальше углубляться, в драйвера и системное программирование или в прикладное? Этот вопрос я задаю именно в форум "О работе" потому, что этот вопрос интересен мне в первую очередь с этой точки зрения. Насколько мои навики в той или иной области будут востребованы, в какой из области я в будующем смогу получать лудший доход, став специалистом в ней?
Тут есть еще одна очень важная тонкость: Теория без практики мертва!
Обязательно нужно практиковаться!
А очень часто получается, что в этой практике Ваш текущий РАБОТОДАТЕЛЬ НЕ ЗАИНТЕРЕСОВАН!
Так, если заниматься разработкой драйверов, то это надо делать в конторе, где есть ВСЯ НЕОБХОДИМАЯ ТЕХНИКА для этого.
Занимаясь в отрыве от технической базы (я раньше интересовался данным вопросом — драйверописанием) почти что ничему не научиться...
В то же время, для прикладного программирования капитальные затраты на рабочее место на порядок ниже — есть компьютер и работаем с ним!
Здесь в домашних условиях можно достичь определенного профессионализма.
Конечный выбор естественно за Вами, но специалист без практики — не специалист
Здравствуйте, DerBober, Вы писали:
DB>Линейка развития зависит лишь от организационной структуры конторы. А продвижение по линейке — от возможностей отдельных индивидов.
Дело не в этом. "Прикладники" неизбежно при продвижении вверх по линейке развитя, приближаются от чистого программирования к потребностям прикладных областей.
"Системщики" в своем развитии продвигаются только "вглубь" используемых технологий.
Отсюда и разница в открывающихся возможностях. Это не зависит ни от конторы ни от твоих возможностей.
— в свете которого не могу рекомендовать Вам драйверный путь — ибо он тяжел. точнее очень тяжел. Если только чувствуете что это дело нравится — тогда можно подумать дергаться ли.
с С/C++/ATL/WTL/MFC и даже немного шарпными GUI штуками я тоже умею управляться, на случай если есть сомнение в адекватности — так вот однозначно скажу:
1. после определенного уровня в ядре уже ничего на этой земле (land, user которая) не страшно хотя работа сложная бывает везде! — с этим не спорю, обращаю внимание всех. просто ее уже не боишься, чтобы не попросили. Уже понимаешь четко что вопрос — только в ресурсах \
2. очень сложно найти место где Ваш труд будет пропорционально и адекватно (на Ваш ессно взгляд) вложенному труду оценен (в любом смысле — денег или нематериальном) не толко в нашей стране, но и за пределами. Причины довольно ясны и описаны как выше по ветке так и в моих ссылках выше — уж в этом отношении на формочках можно ого-го как скакнуть и главное быстро и относительно легко.
3. шутка или нет — не скажу, но подумайте и об этом тоже: говорят есть такой маленький момент — типа GUI ценится, бывает, начальством гораздо благосклоннее (по психологическим причинам?) ибо глазами можно посмотреть на окошки-формочки, а вот что там происходит в недрах, куда никогда не проникает луч GUI, на что уходят месяцы труда — не то что увидеть, а просто понять\объяснить бывает трудно человеку без соотв. подготовки
Т.е. в WinForms Ваш прогресс увидят и оценят быстро — да и самому всегда приятнее когда видно результат труда, кто бы спорил Собственно, куда клоню — для каких-то типов\темпераментов\характеров это важно, а в ядре там определенное упорство нужно и легко довольно (поначалу-то точно) вообще постоянно в депрессии пребывать по причине разных беспросветностей которые и глазу-то удовольствия как раз не несут никакого — пока наконец картина мира не начнет (вдруг!) из крупиц добытых непосильным трудом складываться. Короче, не все выдерживают, а время, потраченное, как известно — не вернешь.
Короче drivers vs winforms — очень разное время, так сказать, входа на рынок. А также цена вопроса (усилий). Нужно ли оно Вам — уже думайте сами.
... << RSDN@Home 1.2.0 alpha rev. 655>>
Valery A. Boronin, RSDN Team, linkedin.com\in\boronin
R&D Mgmt & Security. AppSec & SDL. Data Protection and Systems Programming. FDE, DLP, Incident Management. Windows Filesystems and Drivers.
Здравствуйте, Valery A. Boronin, Вы писали:
VAB>1. после определенного уровня в ядре уже ничего на этой земле (land, user которая) не страшно хотя работа сложная бывает везде! — с этим не спорю, обращаю внимание всех. просто ее уже не боишься, чтобы не попросили. Уже понимаешь четко что вопрос — только в ресурсах \
Полностью с вами согласен, особенно по высше приведенном высказывании. Раньше, когда я слышал на свойей фирме что-то на подобии: "Виртуальный диск FTP сервера", "Удаленный мониторинг за ПК в обход файрволов и антивирусов" или "Перехват операций открытия файла на уровне драйвера диска", то я абсолютно не понимал как-это делается. А теперь — понимаю, более того, могу посмотреть исходники.
Осталось только научиться самому делать подобые вещи...