Pull to refresh
45
0
Андрей Артемьев @artmv32

Windows Kernel Developer

Send message
Купите себе Кормена на русском в бумажном виде.
Положу себе в список статей которые нужно написать )
  1. Это был мой первый опыт общения с носителями языка. Язык я учил на слух по мультикам, кино и заучивал темы которые задавали в универе. Сейчас есть много интересного контента на английском в ютубе. Над грамматикой я не заморачивался. Знать слова и выражения на слух куда важнее. Когда вы учили русский, то не начинали с грамматики. На мой взгляд языковые школы это скорее симуляция обучения. Они мне помогли только когда я готовился к TOEFL, мы разбирали тесты и к ним готовились. По итогу у меня получился высокий бал, может 98, я не помню.
  2. Я уже работал чуть меньше года программистом C#, плюс ко всему получил до подачи резюме штук 5 сертификатов по стеку технологий .Net, чтобы указать их в резюме. В свободное время очень много программировал, поэтому знал и С++ и DirectX. Всё это указал в резюме. Туда же подойдут и дипломные курсовые, опять же если они действительно стоящие. На первом курсе моей курсовой было написать на Дельфи (Pascal) игру где самолётик расстреливает летящие на него объекты, такой тип игр называется скроллер. Было достаточно нарисовать треугольнички и палочки. Я пошёл дальше и несколько месяцев всё свободное время тратил на курсовик — в итоге от моей курсовой обалдели все. Там были, 2D графика, анимации, звуки стрельбы, уровни сложности, меню. Вот её я и указал. Сейчас можно участвовать в опен-сорсах, модить. Скажем так, увлечённый программированием человек выглядит в глазах работодателя выгоднее чем просто программист.
Плюс у компаний есть свои любимые темы, в зависимости от специфики. В Windows повсюду LinkedLists, в гугле — графы и деревья.
Где-то читал, что программисты больше всего учатся когда готовятся к поиску новой работы.
Здесь надо относится к процессу подготовки не как к натаскиванию на прохождение интервью в Микрософт, а как к профессиональному росту. Стараться получать знания которые будут актуальны и после интервью, а не сдал и забыл. Я в списках указал далеко не всё что я изучал. Я бы ещё добавил в список книгу Code Complete. Все эти знания помогли быстрее адаптироваться на новом месте. Процесс подготовки напрямую связан с тем что будет происходить в рабочей обстановке. Конечно вы не будете каждый день решать задачи по программированию и писать хитрые алгоритмы. Но смысл этих задач в другом. В работе программиста достаточно много рутины и места для проявления смекалки не так много. Задачи по программированию это такой концентрат программисткой мудрости. Многие из них можно решить несколькими способами, разными по скорости и памяти. Эти задачки заставляют подумать об особых случаях — переполнение целого числа, ситуации когда алгоритм работать не будет, подсмотреть элегантные способы решения.
Вот пример задачи:

Степень числа определяется как количество преобразований числа пока оно не будет равно 1 по следующему алгоритму:
  1. Если число (x) делится на 2 — разделить на 2
  2. Иначе x = x * 3 + 1

Нужно реализовать функцию int GetKth(int low, int high, k). Она рассчитывает степени чисел от low до high включительно и сортирует их по степени в порядке возрастания. Если числа имеют одинаковые степени — расставить по порядку их значений. Функция вовзращает k-е число в этом массиве. 1 <= low <= high <= 1000.

GetKth(12, 15, 2) = 13
GetKth(1, 1, 1) = 1
GetKth(1, 1000, 777) = 570


Я знаю три решения этой задачи, решение №2 модификация решения №1. Решение №3 — очень остроумное, оно значительно сокращает время рассчёте степеней чисел.
Сейчас я работаю над Windows Core OS и Windows 10x. Каких-то модных и крутых процессов у нас нет, хотя это зависит от проекта и области в которой работаешь, Microsoft большой и имеет много проектов разной направленности. У нас есть период когда работаем над новыми фичами и есть период когда фиксим баги, если не успеваешь реализовать фичу (что нежелательно), её перенесут на следующую итерацию или релиз. В приоритете не скорость, а качество. Шутникам про баги в Windows скажу, что проект операционной системы по сложности значительно отличается от всего с чем вы имели когда-либо дело.
Тут вообще много чего можно написать, на отдельную статью потянет.
Каша в голове от обилия новой информации происходит всегда. И с ней всегда приходится разбираться через практику.
В чём будет измеряться будет ущерб? В рублях? Сожжённых ПК?
YouTube в рекомендациях выдаёт видео и с противоположной точкой зрения. Если человек верит в плоскую землю, то возможно ему это выгодно.
В мире уже почти 1 млрд Windows 10 машин, все аппаратные и программные конфигурации в тестовой лаборатории воспроизвести невозможно.

Когда в обновлении ОС имеются потенциально опасные изменения, они включаются не сразу, а постепенно. Такие изменения выглядят примерно так:
if (Features::TheNewFeatureEnabled()) {
   // new code
} else {
  // old code
}

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

Если статья для «железячников», то про Total Commander, BIOS, MS Office лучше написать что это графическая оболочка через которую пользователь взаимодействует с железом. (Это в моей первой статье я называл микросхемы микроконтроллером Total Commander операционной системой, по-вашему) Сигнал приходит в CPU, где его подбирает ОС через механизм прерываний, обрабатывает, возможно передаёт информацию о клавише активному приложению, которое может его так же обработать выполнив привязанную команду или отобразив на экран букву используя графические библиотеки ОС, которые в конечном счёте вызывают драйвер видеокарты. Я бы примерно такого подхода придерживался и придерживаюсь в своей статье.

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

Мир Алисы Селезнёвой в котором маленькая девочка знает квантовую физику гораздо ближе чем кажется. Лет 300 назад только монахи имели доступ к научным знаниям, потом аристократы, потом университетские профессора. Т.е. раньше чтобы удовлетворить тягу к знаниям надо было преодолеть огромные барьеры и мириться с неудобствами: высокомерным и хамоватым преподом, чистить парашу за монахами. Сейчас благодаря YouTube, блогам можно получить информацию доступным для себя языком и в нужном объёме. Что делать с этой инфой — личное дело каждого, Интернет сделал информацию доступной всем. Английский можно учить у носителей через Ютуб, а не через псевдоразговорники. Алиса была такой умной потому что у них в будущем квантовая физика была расжёвана блогерами и любителями с разных сторон, доступным для своей целевой аудитории языком. Потому что лучшие преподаватели настоящего и прошлого оставляли записи своих лекций доступные всем и всё что непонятно можно было понять в 5-ти 10ти минутном видео. Обсуждения на форумах людей из разных дисциплин позволяют понять информацию ещё глубже, даже если это было лет 50 назад. Это не делает людей тупее, большее количество людей получает возможность найти себя в разных областях и не за 7-10-20 лет, а за 3-5 года. Мы ещё в самом начале этого нового Мира.

Разве это плохо, что человек загорится железом или низкоуровневым программирование после моей статьи, потому что она была написана понятным для него языком? Или потому что сложила все паззлы мозаики знаний хаотично разбросанной древней и неэффективной системой образования? Человек изучит более глубокие статьи по теме и не будет говорить глупости как я. А мне не обязательно знать на отлично электротехнику, потому как я с ней не работаю и своим невежеством нанести ущерб не могу. Мною движит интерес как эта коробка на столе работает, я не собираюсь их проектировать или ремонтировать. И таких как я много.
«О работе ПК на примере Windows» — это название серии статей. В первой части были основы, в этой рассказал как сигнал о нажатой клавише передаётся, в следующей будет немного про драйвера и что Windows 10 делает с полученной информацией, как нажатая клавиша приходит в окно и что происходит дальше.

Windows изначально делался максимально переносимым на все существующие платформы и платформы которые появятся в будущем. Ему всё равно на каком железе работать, поэтому угулябляться в эту тему и приводить современные материнки, клавиатуры и USB-порты на мой взгляд не обязательно, это добавит сложности понимания и деталей которые скроют основной посыл и породят споры уводящие дискуссию в сторону. Windows 10 поддерживает PS2 и теоритически может работать с тем железом что я придумал, надо просто добавить поддержку в ACPI.sys.

Без описания процессов которые происходят на материнке для передачи сигнала о нажатой клавише статья не достигнет цели — снять ореол мистики с ПК и дать представление как машина работает в целом. Какие минусы того что человек который не проектирует железо и даже не пишет драйвера будет примерно представлять как ПК работает на уровне железа?
LowLevelKeyboardHook — позволяет перехватывать нажатые клавиши до того как они попадут в приложение. Чтобы нажимать клавиши смотрите функцию SendInput или InjectKeyboardInput. DirectX может вызывать свой API для чтения данных с клавы. Раньше он назывался DirectInput, сейчас не знаю.
Вы не убедили меня что статья сделана плохо. Я знаю много людей которым хочется знать о том как работает ПК именно в таком объёме. У меня есть основания считать что она сделана хорошо, хотя можно было и лучше. Поскольку статья волонтёрская то я рассчитываю что читатель увидив ошибку сообщит о ней, а не будет говорить что вся статья кака, т.е. отнесётся к моему труду с уважением. Если бы я делал это за деньги, то тут другой вопрос.

Ваш аргумент о том что приходится работать с людьми которые заблуждаются и в этом отчасти моя вина я не понимаю и не принимаю. Если человек работает с электроникой он должен полагаться не на бесплатные любительские статьи в Интернете, а на платное образование — учебники, видеокурсы, тренинги, учёбу в университете. Даже если бы Вы были преподавателем и работали со студентами. Они будут лучше понимать материал если будут рассматривать его с разных перспектив и тем более если найдёт неточности и ошибки, можете не соглашаться со мной. Если Ваши клиенты не шарят в электротехнике, то опять же претензии не ко мне.
Конструктивная критика это когда указывая на недостатки вы учите другого человека, а он учит вас. Т.е. идёт взаимный обмен и наносится непоправимая польза всем участникам дискуссии. Необоснованная деструктивная критика пользы не приносит. Сказать что статья какашка много усилий не надо, технического опыта тоже. Никаких обоснований своей критике Вы не приводите.

Вся статья бесполезным бредом быть не может. Потому что:
  1. Я сравнивал материал из разных источников, освежал знания
  2. Час консультировался со спецами работающими над железом для MS Azure
  3. Консультировался по поводу микроконтроллеров со своим коллегой получавшим образование по теме
  4. Компетентные люди уже отозвались о ней положительно в коментариях.

Неточности в статье вовсе не значат мои коллеги из MS некомпететны. Потому как я мог неправильно понять или воспроизвести их информацию. Эта статья исключительно волонтёрская работа за которую я не получаю денег и делаю из собственного интереса. Поэтому я не стал заморачиваться с наймом за деньги фрилансера-специалиста в этой области, чтобы он прочитал текст и выдал рецензию и редактора чтобы он проверил текст на читабельность. Или вы думаете кто-то будет такой большой текст за спасибо обрабатывать?
Спасибо большое.
Я так понимаю что вы занимаетесь исключительно хардверной разработкой и потому хочу пояснить некоторые моменты относительно того что происходит выше по технологическому стеку. Статьи Ваши почитаю, но потом.

В хорошо спроектированной системе различного рода нюансы скрыты за абстракцией. Если я меняю код уведомляющий читалку экрана о нажатии клавиши, мне не надо думать на какой материнке и с каким CPU работает код. В Windows есть HAL.dll и ACPI.sys которые скрывают все нюансы материнских плат и тем самым облегчают разработку драйверов и ОС, поэтому Windows будет работать одинаково хоть на новом хоть на старом поддерживаемом железе. Для человека который пишет код в режиме пользователя — таких очень много на этом ресурсе — абсолютно ничего не меняется. Если удалось установить и запустить Win10, то на ней будет работать всё что было написано под Win10. Возможно будут ошибки из-за недостатка памяти, медленная работа, но это уже отдельный вопрос. К слову, Windows идёт к тому чтобы UWP apps работали везде — Desktop, IoT, XBox и другие платформы которые будут в будущем.

Для разработчиков железа подобные неточности важны, но для человека который железом не занимается — нет. Я хочу доступно рассказать и студенту первого курса и сеньёру .Net как работает ПК. Такого уровня деталей для этого на мой взгляд достаточно. Студент за годы учёбы выяснит какие напряжения и какие транзисторы на самом деле используются. Сеньёр .Net никогда не будет заниматься железом и будет знать что есть пороговое напряжение, почему 0 и 1. Такого уровня деталей достаточно чтобы понять как определяется нажатие клавиши, как оно потом достигает CPU, как задаётся логика работы микросхемы. Микросхемы, микроконтроллеры и радиоэлементы не цель этой статьи.

Ещё раз говорю, что для владения авто вам не надо знать теорию ДВС, сопромат, гидродинамику и пр. Достаточно примерно знать как все узлы работают вместе, чтобы решать вопросы с СТО. Если вы захотите построить свой авто, то придётся штудировать много предметов. Универ предлагает долго и мучительно изучать математику, сопромат, физику, чтобы к пятому курсу вы сложили в своей голове авто. В дополнение к подходу снизу вверх, я предлагаю рассмотреть как оно работает в движении.

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

Information

Rating
Does not participate
Location
Seattle, Washington, США
Date of birth
Registered
Activity