Резюме для программиста
но и в частности именно под это конкретное место
-----
Пришел как-то на интервью как шарповый кодер.
Ни одного вопроса по шарпу, дотнету, вебсервисам... один сплошной СКЛ...
В конце их спрашиваю :
- Я пришел как шарпист, а вы меня спрашивали только по СКЛ - в чем причина?
- У нас ушел специалист по СКЛ - ищем замену...
Врагов себе наживать прямо с Vorstellungsgespräch не стоит, потом тоже будет достаточно возможностей.
Если задавать неправильные вопросы, то таких возможностей скореее всего не будет. Потому что присутствующие как раз и принимают решение о дальнейшей совместной работе.
Мне тоже нужно знать куда идти и с кем работать. Иногда ясно, иногда нет.
Собеседование это самое неподходящее место для персонального тестирования работодателей. Во первых кто сказал, что именно с этими людьми придется непосредственно работать. Во вторых дурь каждого сразу видна и без каверзных вопросов. В третьих ну ищет сейчас наша фирма хороших фронтэндщиков. И если придет такой вот кандидат и начнет нас по ангуляру гонять, мы все провалимся. Да, мы готовы обсуждать тех. вопросы и готовы дать специалисту построить систему по его разумению. Да, можно вопросами проверить, насколько мы хорошие коллеги и какую степень свободы получит кандидат. Или что у нас уже есть и в какую сторону стратегически мы движемся. Но вот конкретно спрашивать по недостаткам системы навигирования в
ангуляре - мне было бы очень стыдно, но я бы провалился.
- ладно говорю - не проблема - dля большой таблицы наиболее быстрым будет дроп & креате...
Тоже сразу об этом подумал, но сломается ORM. Придётся раскидывать по всем приложениям обновление ORM. Так что, пожалуй, лучше подождать очистки через delete from table, даже если это займёт сутки. Это же одноразово делаться будет?
Обновлять и проверять ORM - это надо заводить таск на день работы программиста, если не больше - в зависимости от того, сколько на эту БД и ORM завязано. А очистить таблицу скриптом или процедурой - пару минут работы DBA.
Понятно ЦОС и Котельников в пролёте
Что там с NI и LabView? Сколько вообще проектов было? Чем можете похвастаться в реализации проектов?
Как проходила разработка, что использовали? На что ушло 10 лет?
Надо обязательно что то найти...
С Лабвью работал другой парень - он программировал плату, а я с платой общался через Ethernet посредством TCP. Там ещё была проблема, что плата была на ARM-процессоре, у которого другой порядо записи бит в байтах (endianness) - приходилось при парсинге все значений реверсировать порядок бит.
Короче, щас дописываю новый вариант резюме. Решил действительно сжать часть про обучение и школу выкинуть, и в опыте работы добавлю описание работы и ещё одного работодателя.
Кстати, как я понял, если есть мастер и бакалавр в той же области, то бакалавра можно опускать? Т.е. я сначала бака получил, а потом мастера в той же области.
Я например иногда спрашиваю: А как Вы относитесь к Uncle Bob?
Если чел. не знает ни Роберта Martin-а ни Martin-а Fowler, то с ним уже всё ясно.
Да даже информация Git или SVN говорит о многом.
Хмм... Я не знаю этих трёх чуваков, и Гита у меня нет. )))
Во вторых дурь каждого сразу видна и без каверзных вопросов.
Я на собесах говорил, что не люблю джаваскрипт. Похоже, не нужно было этого делать. Тем более, что я его почти не использовал - т.е. не могу профессионально указать слабые стороны джаваскрипт и объяснить, почему он плохой. Но он мне сразу не нравится, даже с поверхностной точки зрения - я начитался статей, где люди пытаются делать с ним элементарные вещи, типа сложения чисел или работы с массивами, а из-за отсутствия типизации там вылазит всякая хрень. Ну джаваскриптеры говорят, что мол нужно просто знать длинный список правил, как там типы приводятся, и вообще заранее знать, с каким типом данным ты работаешь, или проверять их тип, прежде чем работать. Если такие проблемы даже в элементарном, что будет, когда глубже копать начнёшь? А народ пытается на нём огромные приложения писать, обложившись костылями, добавляющими типизацию, работу с числами и прочим. Вот это я всё выпалил, а на меня посмотрели как-то странно и спросили - "а если мы скажем тебе сайт сделать?". Ну я сказал, что если скажете, то я конечно попробую, но я не спец по сайтам, поэтому лучше эту работу дать профи. А вакансия была в основном с десктопом, и во второстепенных навыках было вроде HTML, JS, CSS.
Среди работодателей ходит мнение, что разработчик должен быть гибким. Сишарпера на джаву перекинуть с переобучением на ходу, десктопера на веб или обратно - в порядке вещей. Вы же у себя в резюме написали, что вы гибкий и обучающийся? Ну вот, вперёд! Вон у нас молодые прыгают по технологиям и языкам как сайгаки - не отказываются от непрофильных заданий. А вы, тридцатилетние старпёры, что-то много претензий и условий ставите.
А кто сказал, что задавать нужно узконаправленные технические вопросы?
Именно это почти бессмысленно с обеих сторон.
Меня гоняли, т.к. я упоминал эти вещи в своём резюме. Вот в этом посте Резюме для программиста - Пробегусь тезисам которые треде увидел Считаю - Программирование (germany.ru)
человек указал в своём резюме (внизу на картинках) XML, SQL и прочее. А как он эти технологии знает? Что насчёт сложных иннер-аутер-джойн со специфическими данными? Или только самые простые операции делал? Или вот C# указан и типа мультитрединг - расскажите особенности работы с барьерами памяти, семафорами и прочим. Если не ответит, это будет выглядеть, как не знает, но указывает в резюме.
Или, например, мне на собесе дали пример замудренного наследования (ну прямо из списка каверзных задач почти) и сказали, что выведет функция в третьем потомке. Надо было знать тонкости, как наследуется то-то и то-то при таком-то модификаторе доступа в родительских классах и таком-то - в дочерних. Я хотел спросить, а они на продакшене такие же замудрёные схемы наследования постоянно используют? - Мы хотим знать, насколько человек глубоко разбирается. Но если не ответишь, то дальше по собесу не пройдёшь. Как я понимаю, им нужны были лишь те, кто очень глубоко разбирается. На зарплату +-100к рублей в 2016 году в Сибири.
реверсировать порядок бит
И как делали?
Я не знаю этих трёх чуваков, и Гита у меня нет
Ну к вам бы в контору, я точно тогда бы не пошел. Чуваков кстати всего два, рекомендую поискать на ютубе.
Я на собесах говорил, что не люблю джаваскрипт
Неправильная позиция, обычно нужно говорить о положительном, а если спросят, то ответ должен быть более гибким.
А как он эти технологии знает?
Никто не гарантирует, что ответы показывают истинное знание.
Если человек сделал за 10 лет несколько больших проектов и рассказывает как он решал сложные проблемы там, то конкретные знания конкретных закавык не играют большой роли. Если попадется, то решит.
И опять таки, тех кто спрашивает подобные вопросы интересует кодер, а не разработчик.
Вот например, какие вы паттерны и либы использовали в своих WPF проектах? О банде четырёх слышали?
Что там с NI и LabView? Сколько вообще проектов было? Чем можете похвастаться в реализации проектов?
Как проходила разработка, что использовали? На что ушло 10 лет?
Сначала я делал простые проекты уровня студента - типа локальная БД и к ней редактор, или дистрибутивы для уже существующих приложений делал. Это всё не стоит даже упоминать - потому что качество первых проектов было у меня хреновым. Помню, как первую БД делал без связей (relations) между таблицами, а потом в коде пытался по одинаковым айдишникам вытащить записи - т.е. эти связи как бы искуственно создать. Там кроме меня в этом почти никто не разбирался, поэтому код ревью и всякие наставления старших - не про меня. Максимум - консультировался в интернете. Потому конечно стал всё нормально делать. А потом сделал простенький сайт для нашей лаборатории на ASP.NET MVC 2, затем перевёл его на 4 версию, и хотел добавить модуль Silverlight для работы с USB-токенами HASP. Дошёл до того, что на сайте смог получить доступ к токену, прочитать с него инфу и показать клиенту, но далее и Silverlight стал в загоне, и у меня на другой проект переключили. Только в последние лет 4-5 делал один большой проект с платами сбора данных Лабвью и диагностики Verbrennungsmotoren. Мы с ним завязли, т.к. долго отрабатывали алгоритмы и много раз переписывали интерфейсы и прочее. Сделал для этого проекта собственно блок расчёта, клиент на WPF (с использованием MVVM и всего такого), очень простой сервис на WCF, сайт на ASP.NET MVC с отображением результатов и графиков, ну и базу данных на MS SQL Server, где всё это хранилось, включая данные клиентов. Клиент на WPF был защищён ключём HASP, сделал на WiX# установщик к нему. Клиент на WPF подключался через TCP к плате сбора данных, и в реальном времени парсил данные с неё, вёл расчёт и отображал на бегущем графике (Dynamic Data Display, который теперь Interactive Data Display) разные параметры двигателя, к которому была подключена плата.
Внутри, правда, всё сделано не очень хорошо. Особенно меня не удовлетворяла работа с многопоточностью. Я делал всё в 3-4 потоках, что-то запускал по-старинке через Thread.Start и синхронизировал через lock, что-то успел переписать на Task-based. Async-await использовал немного. Но так к одной консистенции и не привёл - уже уезжал. В принципе, программа работала и была многократно проверена в разных условиях на разном оборудовании. Описания багов и дальнейшие планы по фичам оставил коллегам.
Ну и под конец с гиперспектральными камерами связался - парсил там их данные в ENVI-формате, спектры изображений вытаскивал.
Параллельно в качестве хобби пытался делать 3D-игрушку сначала на WPF, потом на SharpDX (вовремя бросил - оказалось, что он загнулся вскорости), теперь на Юнити пытаюсь. Но каждый раз доводил лишь до простых поделок, типа этого sitdRemake - YouTube
Меня единственное, что в этом всём беспокоит - у меня нет глубоких знаний по всему этому. Большую часть делал первый раз. Показывать код - просто расписаться, что ты не профи. Если кто-то начнёт гонять, тыкая пальцем в код "а тут почему так? а вы знаете, к чему это может привести?", то что я могу ответить? - Надо было быстро, и я не успел разобраться. Или поленился глубже копнуть. И я незнаю, к чему тут это может привести.
А потом сделал простенький сайт для нашей лаборатории на ASP.NET MVC 2, затем перевёл его на 4 версию
Кстати, всегда считал это какой-то работой "должно быть сделано походу, не отвлекаясь от текущих задачь". А сегодня наткнулся на статью миграции всего лишь фронт-энд фреймворка на ближайшую соседнюю версию Гайд по миграции с Vue 2 на Vue 3. Часть 2 / Habr, где народ целые инструкции пишет. Может, и мне тоже написать в достижения, что мигрировал проект с ASP.NET MVC 2 на 4? Правда, сайт был маленький.
Это всё не стоит даже упоминать
Ну почему, различные проекты для ..., с использованием БД хх
большой проект с платами сбора данных Лабвью и диагностики Verbrennungsmotoren
Ну вот уже что то: проект диагностики Verbrennungsmotoren. Уже можно абзац написать. В ваших районах как раз такие вещи будут интересны.
Внутри, правда, всё сделано не очень хорошо.
Об этом писать не следует, главное что сами понимаете.
у меня нет глубоких знаний по всему этому
Ну так копайте, от завтрака и до забора. Времени еще будет навалом.
реверсировать порядок битИ как делали?
Прошу прощения - не бит, а байт.
Написал класс и инструкцию к нему. Вообще, эта проблема выскочила неожиданно - когда попытались общаться моим клиентским приложением с платой. Никто из нас о разных порядках записей байт в разных архитектурах не знал.
// ---- Учёт порядка байт (endianness), по которому хранятся данные в архитектурах
// Из-за реверсивного порядка байт в комьпютерной архитектуры плат LabVIEW (big-endian)
// по отношению к порядку байт в копьютерной архитектуре х86 (little-endian),
// последовательность байт для каждого значения (т. е. для каждой переменной, хранящей какое-то значение),
// полученного от аппаратного обеспечения LabVIEW, должна быть реверсирована.
// Это в случае, если программное обеспечение на стороне LabVIEW не делает такой реверс само
// (по умолчанию не делает, да мы и не договаривались делать реверс).
// Например, если получено два значения типа, аналогичному типу Int32 в .NET, нужно при переводе каждого этого значения в Int32
// (через, например, метод BitConverter.ToInt32) реверсировать порядок байт этого значения перед переводом.
// При этом строки реверсировать не нужно
// (по крайней мере, если эти строки представляют собой массивы однобайтовых значений - например, когда используется ASCII или UTF-8;
// если же это строки с двух- или более байтовыми значениями, то, НАВЕРНОЕ (т. е. надо выяснить!) надо тоже менять порядок байт).
// При отправке данных с х86 на LabVIEW байты всех значений надо также реверсировать для приведения их к порядку, с которым работает LabVIEW (big-endian).
// В этом классе и классах, которые относятся к парсингу данных с LabVIEW, предполагается, что они запущены на архитектуре с порядком байт little-endian,
// а принимают и отправляют данные на архитектуру с порядком байт big-endian.
// Т. е. эти классы не адаптируют свою работу под произвольные порядки байт и не проверяют свойство BitConverter.IsLittleEndian.
// -----------------------------------------------
Реверсировал банальным Reverse из LINQ по массиву байт. Например, для протокола стандарта SAE J1939
public static byte[] Serialize(SetMode_SAEJ1939 structToSerialize) { var modeBytes = BitConverter.GetBytes((uint)structToSerialize._mode) .Reverse(); byte[] payloadBytes = structToSerialize._payload; int payloadLength = payloadBytes.Length; var payloadLengthBytes = BitConverter.GetBytes(payloadLength) .Reverse(); var extendBytes = BitConverter.GetBytes(structToSerialize._extend) .Reverse(); var identifierBytes = BitConverter.GetBytes(structToSerialize._identifier) .Reverse(); byte[] resultBytes = modeBytes .Concat(payloadLengthBytes) .Concat(payloadBytes) .Concat(extendBytes) .Concat(identifierBytes) .ToArray(); return resultBytes; }
тоже написать в достижения, что мигрировал проект с ASP.NET MVC 2 на 4?
ну если главные проблемы, не забыли то пишите. О размере можно не упоминать.
У вас главная задача получить первое место работы здесь и продержаться там хотя бы год.
Да, будет очень сложно, но рано или поздно что то найдётся.
Вот например, какие вы паттерны и либы использовали в своих WPF проектах? О банде четырёх слышали?
Основной паттерн WVVM. Всякие синглтоны, обсерверы, инверсии зависимостей и прочее - специально ничего не использовал. Может, оно само как-то. Либы указал в другом посте выше.
Про "Банду четырёх" слышал только, что это четыре автора, которые типа опытные и написали книжку о всяких паттернах и программировании вообще. Не читал.
Читал "Совершенный код" (Code Complete) Макконнела по диагонали - ну там где-то треть для меня было что-то вроде азбучных истин, ещё треть - ну ок, логично, и остальное - любопытно, можно подумать применять.
Вообще, всякие вопросы типа "а ты читал это и это?" для меня похожи на вопросы гопника из подворотни "а ты Васю Серого знаешь? а кого знаешь?". Ну не читал я одно, а читал другое. Программировал я программировал, а потом прочитал, что это, оказывается, паттерн Dependency Injection - какой-то его вид. Ну для меня это примерно как - я хожу по улицам, а на самом деле по-научному би-пе-да-ли-ру-ю. ))
Ну почему, различные проекты для ..., с использованием БД хх
большой проект с платами сбора данных Лабвью и диагностики VerbrennungsmotorenНу вот уже что то: проект диагностики Verbrennungsmotoren. Уже можно абзац написать. В ваших районах как раз такие вещи будут интересны.
Да, я уже понял, что лучше всё это расписать.
Глянул на другие резюме - люди любую мелочь туда засовывают. В принципе, я могу свой хелпер для гридов в XAML тоже на Гитхаб вытащить, наверное. Просто никогда не считал это "достижением". А потом смотрю, люди "тьюториалы" выпускают, как три кнопки нажать Adding a texture to a plane in Unity - YouTube. Если вы не понимаете, то это видео из разряда "как создать переменную в C# и присвоить ей значение".
Что такое DRY слышали?
Драй, кисс и прочие - слышал и читал не раз. И забывал точные определения. Это всё советы из разряда очевидных и примитивных. Хотя, вот читнул про драй
Don't repeat yourself - Wikipedia
or using data normalization to avoid redundancy
И там ссылка на
Computing[edit]
In computing, the reduction of data to any kind of canonical form is commonly called data normalization.
For instance, database normalization is the process of organizing the fields and tables of a relational database to minimize redundancy and dependency.[6]
Помню, что с нормальными формами баз данных так толком и не разобрался. Читал только, что первая и вторая используются вроде как почти повсеместно, а чтобы привести к последующим, надо некисло в предметной области разбираться, чтобы понимать, какие данные реально есть по сути дубли других данных. Далеко не каждый специалист это сделает.