Thursday, 28 February 2013

Плани на цей рік

Дуже часто блогери пишуть плани буквально в перші дні нового року, але в мене це зайняло трохи більше часу хоча й лпани досить стандартні. Отож, що я хочу від цього року:medium_5750960959

  • Перш за все це побільше читати. Частково почав реалізовувати купивши Іпад
  • Закріпити знання по WPF. Добре засвоїти базові концепції
  • Побільше практики в суміжних технологіях (web, wcf, sql)
  • Засвоїти патерни проектування та використовувати їх
  • Алгоритми
  • Зробити декілька презентацій на рівні тімки і далі на рівні компанії
  • Долучитись до опенсорс проекту

Вже маю декілька прочитаних книг, так що найблищим часом поділюсь своїми роздумами про них. Також мабуть додам список того, що хочтів би прочитати до кінця року і намагатимусь постійно оновлювати статуси.

Як показала практика для того щоб попасти на роботу в велику компанію треба добре знати алгоритмічне програмування, це найбільший пробіл в моїх знаннях який я хочу заповнити. Постараюсь також робити це більш менш публічно щоб мати якийсь стимул довести цю справу до кінця.

Можливо план і виглядає досить таки реальним, але насправді якщо зроблю половину з цього буду дуже радий. Тому що алгоритми треба вчити не менше 3 місяців, паттерни мабуть ще місяця зо два, а ще й попри це відпочивати/працювати/читати/презентувати/…. Тому як часто радять в великих книжках “починай з маленького” або “зменши очікування і зменшиш розчарування” всетаки набагато приємніше думати, що ти зроби більше, а ніж очікував а ніж постійно бачити, що ти не встигаєш.

До зустрічі

Ігор

Thursday, 6 December 2012

Зміни, хороші та не дуже …

В продовження статті про Windows 8 хотів би написати декілька слів про поточний стан в світі ноутбуків/ПК. Так вже сталось що ця тема в останній час набрала не аби яких маштабів і в принципі винуватцем у цьму якраз став вихід нової операційної системи від Майкрософта.
Отож проблема досить проста, новий інтерфейс операційної системи “неправильний” і це багатьом не подобається, особливо якщо звернути увагу на те, як добре подавалась попередня версія віндовс 7. Але давайте все по черзі.
Всі звикли до меню пуск і дійсно новий інтерфейс не викликає довіри у професійних користувачів, так користуватись не зручно, на стареньких ноутбуках які служили нам роками толку від нових фіч не багато, та й навіть на ноутбуках в яких є сенсорний екран користуватись ним всеодно незручно і це факт.
03cef5ff-566a-4982-84b3-9a216c170944_15
Але стоп, ми ж в цьому випадку порівнюємо нову ОС з тим до чого ми давно звикли(віндовс 7). При цьому не даємо шансу показати свої переваги бо порівнюємо ми ці дві системи зазвичай на ноутбуках які в принципі для роботи з новою ОС не готові і в цьому основна проблема!
Коли зявився перший IPad всі плювались що це просто дорога непотрібна нікому забавка яка в принципі нічого нового нам не дасть. Це були ті поспішні висновки які просто показують обмежаність нашої уяви та присущий всім людям страх перед новим. Ми навчились користуватись мишками, вивчили знаходження 120 клавіш і тут нам кажуть “Ось новий девайс і він крутіший, він має новий інтерфейс.. ” і це значить що навчання треба починати знову., а цього вже ніхто не хоче… Але прогрес не зупинити і відповідно зараз говорити, що айпед був провалом, буде дуже смішно. Він не лише знайшов собі місце, він навіть в деяких випадках став незамінним інструментом поєднавши в собі трохи можливостей ПК, трохи читалок і все це в компактному гаджеті, який дуже легко носити з собою та це й до того він собака живучий. overview_hero6
Другий проблема ми досвідчені користувачі думаємо, що всі такі ж розумні як ми. Ми елементарно не можемо зрозуміти, що людям далеким від техніки набагато легше просто тапнути на іконку скайпу і спілкуватись в ньому в повноекранному режимі а ніж клацати мишкою по тій же піктограмі і працювати з вікном яке іноді розлітається на дві частини. Тим більше що для запуску скайпу мишкою їм придеться навчитись користуватись мишкою, а в випадку сенсорного екрану все просто. Наприклад я б реально краще купив батькам якийсь планшет, а ніж ноутбук. Клавіатура їм в принципі не потрібна, все що їм треба це дзвонити і для цього планшет виглядає оптимальним рішенням. Лише декілька кнопок на корпусі при тому що одна відповідає за включення дві за гучність виглядають реально набагато простіше а ніж ноутбук з сотнею клавіш. Планшет не відлякує. Але так як ера ПК вже пройшла і з цим сперечатись важко, зараз більшість вибирають ноутбуки через їхній явний плюс це габарити. Але для тих хто ще для себе того вибору не зробив й розроблений Windows 8. Він з одного боку повноцінний ноутбук з іншого легкий в користуванні планшет.
Отож гібриди наступають.
envy1_tcm_245_1301471
Давайте на хвилинку подумаємо наскільки прикольно мати ноут, особливо на фірмах з частими мітінгами, та коли від вас вимагається бути на звязку весь час. Ідеальним рішенням можуть бути ультрабуки, вони тонкі легкі та потужності вистачає для повсякденних задач з головю, але ідея коли ти, сидячи за робочим столом, можеш просто відстібнути дисплей ноутбука і піти з ним на зустріч реально крута. В більшості випадків вам буде достатньо цього дисплею а для окремих випадків коли вам прийдеться щось занотувати ви можете взяти з собою докстанцію або скористатись екранною клавіатурою. Ви маєте той сами ПК на якому ви тільки що працювали де завгодно, ви залишеєтесь на звязку, можете показувати документи, презентаціїб фото і тд не підключаючись по ремоуту або тягаючи з собою великий ноут, все що вам треба це просто взяти його частину і все при цьому це більше ніж планшет хоча й майже в тому самому формфакторі. 
Я не буду вникати у всі проблеми нового віндовса але як на мене то майкрософт грубо кажучи рухається в потрібному напрямку. Так їм потрібен час щоб допиляти ОС можливо наступна версія змінить основні суперечливі моменти, але я вже готовий до зміни ноута на щось з сенсорним диссплеєм. Щось, що вже можна взяти з собою як планшет або ноут, можливо я й не користуватимусь цим так часто як я собі це уявляю, але те, що така можливіть в мене буде для мене дуже важлива.

Friday, 28 September 2012

Перші дні на роботі

В продовження статей про навчання та працевлаштування хотів би трохи розказати про саму роботу, що вона собою представляє, що вартувало б знати прийшовши на роботу і куди рухатись далі. Іноді людей беруть просто з вулиці, ніякого досвіду в них немає і відповідно виникає купа питань про організацію робочого процесу в ІТ канторах. Отож сьогодні розкажу про ті граблі на які досить часто стають всі новачки.
В більшості кожна фірма проводить декілька тренінгів для новоприбулих працівників і в деякій мірі надає ту кількість інформації яка необхідна працівнику напочатку. Але половина з цієї інформації вже після першого робочого тижня забудеться, так що перш за все необхідно записувати і задавати уточнюючі питання. Ну уявимо, що вам все досить добре пояснили, показали кухню, туалети, робоче місце і можливо навіть мяко обяснили чому вершки до кави які стоять на кухні брати не можна. І от ви сидете на своєму місці перечитуєте купу паперів і конфігуруєте почтового клієнта… Ну щож вітаю, а тепер давайте уточнимо деякі деталі.
Перш за все, те що вас взяли на роботу означає що на вас розраховують і в ваших інтересах пройти випробувальний період якомога краще. Отож набік соціальні мережі, в вас реально багато роботи і лише від вашої організованості залежатиме як ви з ними справитесь.

Ознайомлення з проектом

Перш за все вас повинні ознайомити з проектом. Це зазвичай робить техлід, або просто працівник який добре розміє архітектуру проекту. в результаті ви повинні знати:
  • на якій мові пишуть проект і з використанням яких технологій;
  • яка ваша роль в даному проекті, та з чим працюватимете ви;
  • до кого звертатись з питаннями;
  • як тирити вершки з кухні )
Вартує запитати:
  • як ведеться облік дефектів
  • де можна знайти інформацію про проект(інформація про основні модулі і функції)
  • що насам перед необхідно зробити(що підівчити, куди не лізти)
Взнавши технології які використовуються на проекті, та спитавши про те чим ви будете займатись і що вам необхідно вчити ви вже на половині дороги до успіху. Приділіть час на вивчення проекту та його структури, вам як мінімум необхідно взнати звідки беруться дані, де вони обробляються і які файли відповідають за відображення. Промалювавши собі таку схемку буде набагато легше шукати необхідні місця в майбутньому.

Важливість питань

На це в вас може піти більше одного дня, але якраз перший тиждень по суті виділяється вам на ознайомленняо. Після ознайомлення в вас зявиться наступна порція питань і це дуже важливо щоб вони в вас були. Дуже часто новачки пробують розібратись у всьому самі, але не завжди це получається і відповідно зізнатись, що чогось не розумієш і поставити плямку на своїх знаннях(вмінні аналізувати) ніхто не хоче і ЦЕ ДУЖЕ ВЕЛИКА ПОМИЛКА. Преший місяць це той час коли ви повинні запитувати найбільше, ви не можете знати всього і розуміти проект на всі 100, ви повинні аналізувати та питати. Коли ви не задаєте питань це обовязково вилізе пізніше і може вплинути на те як ви справлятиметесь з роботою. Отож перший місяць це час коли тупих питань для вас немає. Зрозуміло що не потрібно питати щось по мові програмування те що ви можете взнати через 2 хвилин гугління, тому вводимо правило 20 хвлин аналізу і 10 гугління. Яекщо вище написане не допомогло, тоді вже можна питати колег і то при цьому попробуйте уявити для чого цей клас можна використати. В результаті мусимо отримати щось типу:
джун – Дивись я тут переглядав код і наткнувся на от такий класс, судячи по всьому він використовуєтсья для того і того, але всетаки я не в цьому не впевнений, можеш розказати в декількох словах що це і для чого?
мегадевелопер – Так дивись тут все просто… / Ну це не я писав але давай глянемо… / Це тобі поки що не потрібно краще глянь шо я написав… / …
В любому випадку ви отримаєте хоч якийсь відгук і це дозволить як мінімум налагодити контакти в тімці, заодно запамятаєте хто як називається ).
Питання такого роду свідчать не про вашу некомпетентнісь, а про вашу зацікавленість і бажання зрозуміти.

Робота як вона є

Для новачків зазвичай дають не важкі завдання які дають змогу ознайомитись з проектом. Дуже часто такого типу тасками є дрібними багами або фіксами, наприклад: все написали як треба але там чомусь щось не підсвічується або валідація погано працює. Такого роду завдання дає змогу ознайомитись з тим як працює валідація і як відобразити що щось ввдено невірно. Все що необхідно зробити в даному випадку це знайти готовий код який відповідає за відповідні функції і додати до нього те що просять.
Звичайно так буває не завжди але в більшості саме так й вчать джуніків.
Сам спосіб організації роботи надіюсь розглянути трохи пізніше.
ПС
Так як ця стаття була написана за проханням читачів чекаю на пропозиції щодо наступних постів.

Friday, 17 August 2012

Windows 8

Зважаючи на те що я одним з перших отримав фінальну версію Windows 8 і на даний час користуюсь нею вже практично 2 дні), хотів би напишсати про це декілька слів. Перше на що хочу звернути увагу так це те що встановити ОС без вводу серійника не получиться і це погано бо в віндовсі 7 привик активовувати ОСь після інсталації просто покіюванням серйника. Тут же, його треба втоптати вручну на перших кроках інсталяції. Сам процес інсталяції досить стандартний і здивував мене лише синій фон який при першому відобреженні нагадав мені БСОД. Я вже був готовий побачити звіт про помилку і навіть витягнув телефон щоб запостити це чудо в твітер, але виявилось, що це просто тло, незнаю чи це такий собі жарт від мелкомягких чи що, але увагу воно безумовно привернуло.

Метро(new UI)

Capture4

Це більше ніж поламані стереотипи і зовсім інший підхід. Мені як користувачу який звик до віндовсьокого вигляду, ще починаючи з віндовса 98, мяко кажучи було не комфортно. Немає меню пуск. Де “All programs”, як виключити цю вінду і як запінати “My Computer” на робочий стіл? Якщо на перші два питання відповідь шукав я не довго, то от третє так і залишилось без відповіді. І чесно кажучи це в мене викликає певний дискомфорт тому, що я юзер з великим досвідом і тд як останні ламер тупо зробив лінк на мій компютер і помістив його на робочий стіл.

Кути

CaptureCapture1Capture2

Кожен кут має значення! Ось яким має бути слоган нового віндовса. Навівши мишку в якийсь з кутів ми отримуємо доступ до головного меню/десктопу, до вікна переключення між активними тасками і до правої панельки з декількома додатковими кнопками. Лівий нижній кут для мене виявився на диво зручним, насправді досить легко можна повернутись на десктоп чи до меню пуск, плюс до того переключання досить плавне. Лівий верхній дозволяє переходити(закривати) між запущеними додатками, змирився… Права панелька поки що не прижилась, але час покаже.

Тач

Capture5

Так вже склалось що в Україні не дуже багато ноутів мають тач скрін і мій старенький емашінес в даному випадку не виклчючення. Зразу ж виникає логічне питання чи зручно користуватись аплікаціями які мають метро дизайн і тд без тач дисплею. Відповідь досить очікувана НІ і діло навіть не в тому щоб прокрутити горизонтальні списки в метро аплікаціях необхідно використовувати вертикальний скролер мишки. Я очікував наприклад в аппсторі стиль схожий на стиль Zune, але там він набагато простіший/тупіший, ніякого тобі меню і тд якщо хочеш наприклад до якоїсь категорії додатків то тобі просто треба проскролити до нього і це незручно незалежно від того чи є в тебе тач чи мишка. Навіть в тому ж вінфоні все на порядок краще. Навіть на головному вікні для того щоб побачити список всіх програм необхідно натиснути праву кнопку миші і після цього перейти до списку за допомогою кнопки в правому нижньому куті. Інший варіант через меню пошуку лівої панелі, але чому не зробити це простішим? Все що я хочу це побачити список всіх доступних програм, це та дія яка в користувачів віндовса ніколи не викликала ніяких питань, всі знали де це можна знайти а в даному випадку я все таки стратив трохи часу і методи які я знайшов для доступу до цього меню мене не вразили.

Звикати

Досить швидко звик до деяких фіч, але як написав вище дещо ще дійсно як на мене не зовсім логічно. Я вірю в те що це вимога планшетів і багато чого з цього можна пояснити зважаючи на те що цілиться віндовс не лише на ПК. Але як це будуть пояснювати звичайним користувачам в яких звичайні ноути мені не ясно. Хоча можливо в них таких питань не виникатиме.

Пост в стилі майнд дамп тому прошу сприймати ас іс. Надіюсь що через місяць буде більш позитивний відгук і можливо більш адекватний.

Всього найкращого.

Thursday, 9 August 2012

Навчання

Досить давно намагюсь заохотити знайомих до вивчення програмування та відповідно реального “покращення життя” ну або хоча б фінансового стану.
cc100-cc200-367636-o
І вже так сталось, що люди по своїй природі різні і в кожного свої не лише фізичні але й психологічні можливості до навчання. Одні за мету ставлять дочитати, інші зрозуміти, а в результаті досить часто як перші так і другі не отримують того що хотчуть. Виникає логічне питання як читати ефективніше? Що зробити для того щоб інформація яку ти прочитав запамяталась краще?
З власного досвіду можу сказати що якщо ти щось читаєш і при цьому все зрозуміло то це ще не означає що ти це запамятаєш, зможеш використати чи просто згадаєш коли це буде необхідно. Навіть найпростіші речі іноді забуваються, і випадку псевдо “розуміння” все задється настільки простим що ми не загострюємо на цьому уваги, відповідно ніяких додаткових прикладів чи пояснень. Все що залишається в нашій голові наступного ж дня може зникнути а через місяць навіть сам факт того що ми читали буде дуже сумнівним.
Вчись розмуно.
Асоціації. Дуже добре після кожного отриманого скілза прокачати його асоціаціями, тобто попробуй знайти 3 варіанти застосування отриманого навику і потролити себе самого плюсами і мінусами. Задай собі декілька простих питань:
  • Що це і для чого?
  • Які плюси/мінуси?
  • Як використати і коли краще не використовувати?
Особливо добре це працює коли говорити з собою в голос, негативним фактором в даному випадку є реакція оточуючих. Тут ми й переходимо до наступного методу малювання/записування.
Записуючи/малюючи ми не лише задіюємо зорову память та вдосконалюємо навики UML ми також можемо загострити асоціативну память відповідно до зображення, побачити недоліки коду в плані організації, додатково покращити навики писання коду без решарпера. Цим методом насправді досить часто зневажають початківці, але його дуже часто використовують досвідчені програмісти і якраз над цим треба в першу чергу задуматись.
Повторення. Так чи інакше все запамятати досить важко, тому час від часу бажано повторювати деякі нюанси. Наприклад читаючи книгу можна виділяти важливі репліки чи слова і на наступний день зробити невеличку перевірку знань, це освіжить память і допоможе вчасно довчити те що не запамяталось.
Дослідження. Як тільки ви почали працювати в новій тімці/компанії, ви хочете показати, що можете робити все що від вас вимагають, а чого незнаєте можете швидко вивчити і відповідно зробити як треба. Але тут є один підводний камінь, в такому випадку ви мало часу приділяєте глубокому аналізу коду, іноді ви фіксаєте дефект просто дописуючи костиль і навіть не задумуєтесь над наслідками та можливими побічними дефектами. Особисто для себе впровадив правило ”30 хвилин” яке зараз активно юзаю. За цим правилом приділяю дослідення незрозумілого або просто ознайомленню з кодом, зазвичай цього часу достатньо для того щоб розібратись в певному методі чи невеликому класі. Також цього часу біль ніж достатноь для зарисовки організації коду, основних інтерфейсів і тд. Це не лише дозволить написати фікс там де треба, але й позбавить дурних помилок а також дасть вам краще розуміння коду і відповідно кожен наступний фікс/імпрувмент буде вас рухати в напрямку розуміння архітектури проекту. Це також дозволить досить глубоко проаналізувати її та запропонувати кращі варіанти або як варіант задати питання по тому що вам не зрозуміло.
Зараз логічно задати собі тіж питання про які я писав вище, отож
Що це і для чого це?  - Перш за все це те до чого я йшов досить довго і що реально допомогло мені бути там де я є зараз. Ці прості деталі на які необхідно звертати увагу окуплять себе дуже скоро, вони не лише дають краще розуміння того що ви прочитали, але й підготують вас до поглиблених співбесід. вам не буде страшно написати приклад на аркуші паперу, намалювати невеличку схему, чи просто словами навести декілька прикладів, що погодьтесь найваще для початківців.
Які плюси/мінуси? – Основний плюс це якість навчання, вона зростає і розвиває в вас хороші навики які обовязково пригодяться в житті при аналізі складних ситуацій ітд. Мінуси як на мене не на стільки суттєві.
Як використати і коли краще не використовувати? – Використовувати так як лікар приписав.

Wednesday, 10 August 2011

Хеш код для папки (MD5).

Сьогодні я хочу написати дещо про задачу з якою стикнувся на роботі. Суть її в тому що мені треба промоніторити чи змінились файли в конкретній папці і при наявності будь яких змін вивести повідомлення і тд. Відслідковувати необхідно сам факт зміни даних в каталозі отож логічно було зроблено припущення що по папці нам необхідно генерувати якийсь хешкод і порівнювати його при заупуску програми.
Для діставання хешу файлу досить скоро було знайдено рішення, але нічого схожого бля папки не було…

try
{
    FileStream file = new FileStream(fileName, FileMode.Open);
    MD5 md5 = new MD5CryptoServiceProvider();
    byte[] retVal = md5.ComputeHash(file);
    file.Close();
 
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < retVal.Length; i++)
    {
        sb.Append(retVal[i].ToString("x2"));
    }
    return sb.ToString();
}
catch (FileNotFoundException e)
{
    Log.Debug(e.Message);
}

Отож якщо в нас в папці 100 файлів ми отримуємо 100 хешів і їхнє зберігання та порівняння не є приємлимим рішенням. Після недовгих роздумів було знайдено просте як дошка рішення яким і хочу з вами поділитись, суть його заключається в тому що ми можемо взяти хеш або для стріма або для масиву байт, в даному випадку ми беремо всі хеші для файлів і обєднуємо їх, після чого цю стрічку перетворюємо в масив байтів і генеруємо для неї свій хеш. Ось як виглядає код:
public string GetMD5ForFolder(IEnumerable<FileInfo> listOfFiles)
       {
           string result = string.Empty;
           try
           {
               foreach (FileInfo file in listOfFiles)
               {
                   result = result + GetMD5HashFromFile(file.FullName);
               }
 
               MD5 md5 = new MD5CryptoServiceProvider();
               byte[] computeHash = md5.ComputeHash(Encoding.Default.GetBytes(result));
 
               StringBuilder sBuilder = new StringBuilder();
               for (int i = 0; i < computeHash.Length; i++)
               {
                   sBuilder.Append(computeHash[i].ToString("x2"));
               }
               return sBuilder.ToString();
           }
           catch (ArgumentNullException ex)
           {
               Log.Error(ex.Message);
               throw new ServiceAgentsException(ex.Message);
           }           
       }
Я не тестував це рішення на великих каталогах, але для каталогу з кількістью файлів до 100 я думаю що воно працюватиме без проблем. Як завжди буду радий почути будь які коменти що до коду і побачити кращі варіанти реалізації цієї задачі.

Tuesday, 9 August 2011

Що необхідно знати для того щоб стати Intermediate Software Developer.

Доброго дня всім.

Сьогодні я б хотів поговирити про карєрне зростання і підхід до нього в моїй компанії. Отож компанія досить велика і можливості зростання теж досить хороші, для цього навіть налагоджена відповідна система і якщо ви хочете перейти на наступну позицію по карєрній мапі то ви можете ознайомитись з усіма необхідними вимогами, підготуватись і назначити дату для провірки вашої відповіднсті даній позиції. В моєму випадку наступною для мене позицією є Intermid Software Devoloper. Окрім загальних знань по технологіям з якими я працюю також необхідно як мінімум одна презентація, знання англійської на рівні Intermediate low і як мінімум 2 роки досвіду.

Що до знань яких вимагає дана позиція я напишу трохи пізінше а на даний час давайте розглянемо інші деталі. З досвідом все зрозуміло і чесно кажучи досить серйозно, дуже рідко можна піднятись по карєрній мапі немаючи відповідного досвіду, тому тут вище голови стрибнути практично неможливо, щодо англійської то тут дещо краща ситуація і на скільки я знаю якщо рівень трішки не дотягує то можна просто пообіцяти його підтягнути і попрацювати над ним вже на позиції інтерміда. Презентація це в певному сенсі найпростіша частина, для переходу на інтерміда потрібна як мінімум презентація для власної команди. Я вирішив ознайомити команду з ASP MVC 3. На скільки я знаю майже ніхто з тімки окрім мене реального досвіду в даній технології немає тому з однієї сторони зможу подати корисний матеріал а з іншого ймовірність що завалять компетентними питаннями невелика ) .

Що до таблиці з вимогами то вона розділена на три рівні знаннь: початковий, середній та експерт. Для джуніор девелоперів список вимог набагато менший і я додам його в наступному пості, про вимоги для сеньора поки що говорити дуже рано тому зосереджусь на вимогах для інтерміда:

Design – OOD(Обєктно Орієнтований Дизайн)

CL1 (Beginner)

Abstraction

Encapsulation

Inheritance vs. Aggregation

Modularity

Polymorphism

Types vs. Classes

Abstraction Qualities (cohesion, coupling, etc)

CL2 (Competent)

GoF Design Patterns

Architectural Patterns: Layered Architecture

Architectural Patterns: MVC

Architectural Patterns: SOA and EDA

Architectural Patterns: IoC

.Net

CL1 (Beginner)

System types (value, reference, boxing, generic, type forwarding)

Declare classes, interfaces, class members, static and member

Common Exceptions an exception handling

Type conversion

Equality comparison

System collections

Generic collections.

Events and delegates.

Strings and StringBuilder

Configuration files (System.Configuration namespace)

Serializers, serialize/deserialize objects to binary format

Serialization, serialize/deserialize objects to XML format

Files and Folders (System.IO namespace)

Streams (Stream, FileStream, etc.)

TextReader, TextWriter

XML manipulations

CL2 (Competent)

Specialized collections (CollectionsUtils BitVector32, HybridDictionary etc.)

Implement special .NET interfaces (IConvertible, IDisposable, IComparable etc.)

Managing Application domains

Custom serialization

Custom attributes

Garbage collection

Expose COM components to the .NET Framework and .NET Framework components to COM.

SQL

CL1 (Beginner)

DDL for tables, relationships, primary keys, foreign keys

Data Types (character string, binary string, exact numbers, approximate numbers, date and time, boolean, null)

Data manipulation (insert, update, delete)

Retrieving data (simple select statement)

Using of standard SQL functions

Multi-table queries (inner joins, outer joins)

CL2 (Competent)

Creating and modifying database objects (indexes, views)

Using complex criteria (ORDER BY, GROUP BY, HAVING, IN, ... )

SQL operators

Sessions, transactions, locks

Implementing of custom SQL functions

SQL procedural language, stored procedures, triggers

Retrieving data; Combining the results of multiple queries (union, excep, subqueries)

Handling errors in SQL statements

Cursors

Verification - Automated Testing - .Net

CL1 (Beginner)

Unit testing fundamentals and elementary tests

CL2 (Competent)

Organizing and building unit tests (Nunit, VS 2008, mbUnit)

Managing test suites

Working with test data

Running unit tests

Reporting unit results

Mocks/Stubs (Nmock, POCMock, etc.)

Code Coverage Tools (NCover)

Design – Modeling

CL1 (Beginner)

UML: Basic Diagram Types

UML: Use Case Diagram (Essentials)

UML: Class Diagram (Essentials)

Entity Relationship Diagrams

Data Flow Diagrams

Refactoring

CL1 (Beginner)

Refactoring Concept (what/when/why)

Moving Features Between Objects (basic)

Move Method

Move Field

Organizing Data (basic)

Encapsulate Field

Encapsulate Collection

Composing Methods (basic)

Extract Method

Inline Method

Inline Temp

Replace Temp with Query

Split Temporary Variable

Simplifying Conditional Expressions (basic)

Decompose Conditional Expression

Consolidate Conditional Expression

Consolidate Duplicate Conditional Fragments

Remove Control Flag

Replace Conditional with Polymorphism

Concurrency - .Net

CL1 (Beginner)

Understand CLR threading

Using ASync methods

lock keyword or System.Threading.Monitor

Mutual exclusion and condition synchronization problems

Deadlock problem

В даний список я виніс основні як на мене вимоги, але токож до нього входять вимоги по якості коду, англійскій мові, роботі з SVN репозиторієм і кінцевою інтеграцією. Список як бачите досить великий і я по можливості буду додавати цікавий матеріал з яким зустрінусь по мірі підготовки. На даний час я маю реальний досвід у розробці і відповідно в деяких темах мені лише треба навести порядок. В основному підготовка йде за принципом памятаю непамятаю і незнаю. Відповідно відмічаю кожен пункт, після чого переходжу до навчання. Щодня по можливості перечитую ту чи іншу тему роблю невеличкі записи і обговорюю прочитане з іншими девелоперами…

Успіхів у підготовці!