Tuesday, December 11, 2012

Interview

How to conduct a correct interview?

I have passed many of them in both roles.

My opinion when I conduct such interviews is get to know whether a candidate is a problem-solving type.

What does it mean?

Does it mean that he will be able to know all technologies with all low-level details?..

I doubt.

Very often I interview candidates who are quite good at low-level details but have the lack of architectural skills and can't really provide a solution to my test task.

Do you need a developer who has low-level knowledge and don't have a glue how to solve problems?

Possibly, no.

I won't insist. May be there are situations when it does not matter whether a developer problem-solving type or not -- all what he is supposed to do is to serve as a codemonkey all day long.

But I am stick the following opinion: I'd rather hire a problem-solving type developer with good learning skills than developer who has impressive knowledge in web services, ASP .Net, or whatever-technology but was not able to understand a task and provide a good solution to solve it (no low-level details required -- they can be easily picked up from Google).

Saturday, December 8, 2012

improving education with www.codeacademy.com

I can recommend www.codeacademy.com site to everyone who needs to refresh his/her web-related knowledge, or even learn a new one.

It won't take a lot of time, but I found that this academy can save a lot of time :)

In example, I did not know CSS very well, but one of the courses gave me enough experience in a few hours. :)

S.O.L.I.D. presentation conducted!

Last Friday I conducted S.O.L.I.D. principles presentation in my company, EPAM Systems.


While I was working at Tau Craft, I tried to do it step-by-step, explaining one principle at a time.

But I stopped on the second stage -- Open-Closed Principle as I felt that I need to rethink my approach, them postponed it until this time.

Now I took a completely different approach supplying each principle with a huge amount of examples in Visual Studio 2012.

Combining live coding with theoretical part the whole things seemed more logical and memorable, so my auditory was quite satisfied (that was demonstrated by high course rates).

Let's see one good metaphor for Open-Closed Principle:
OCP

I found it during preparation and now believe that it's the best example I have ever seen! :)

There were some problems with Liskov Substitution Principle, but it went just fine thought it still needs to be improved (will do it).

The most debatable case was Dependency Inversion Principle:

DIP



We spent plenty of time discussing of how much granularity should be used.

And yes! Remember one thing: Dependency Inversion is not equal to Dependency Injection! They are often mixed out, but they should not! :)
Let's have a look at an example.

Before DIP applied:

 On this picture the layering is ok (consider namespace as an assembly/module).

UI depends on Business, Business depends on Data Access.

The DIP violated because two things:

1. UI depends on low-level detail (uses PointOfSaleTerminal class.
2. No abstractions at all.

After fixing we acquired the following picture:




 In this case dependencies were TRULY INVERTED!

All modules now depends on interface class.

I must mention that the key idea is that Dependency Injection is just a tool to implement Dependency Inversion.

You can find a good article about it in Dependency Injection is NOT The Same As The Dependency Inversion Principle by Derick Bailey

Wednesday, November 28, 2012

Mock Object Frameworks and CRC Cards Presentations

Today provided Mock Object Frameworks presentation with live coding session.

Looks like people prefers coding sessions over just presentation, so I shortened the introduction as much as possible.

I covered only the most important parts:

- why we use mock objects (a funny example was given);
- how to transform a system which can't be tested into a system which can be tested with using of mock objects
- types of mock objects: stubs and mocks themselves
- how to implement mock objects/stubs manually and with using of two major frameworks: Moq and Rhino Mocks.

I was thinking of providing one more mock object framework -- Microsoft Fakes -- but failed to do so. Some strange "Not supported" exception were thrown during "test ride" trying to raise an event from mock object. Furthermore, Microsoft Fakes framework distributed among VS 2012 Ultimate edition only, which is not suitable for the most of my listeners.

The next presentation will be about CRC cards. Will try to figure out how to conduct it in the most efficient way :)

Sunday, November 25, 2012

Webinars

I think that seminars are useless in terms of learning how to conduct interesting presentation.

The main aspect of every presentation is auditory reaction. It's hardly possible to see that reaction while doing it in webinar-fashion way.

Two lectures provided last week


Two lectures provided last week:

- Event-Driven Architecture. It was the hardest one. I tried to explain this advanced topic to people, with  code example (Rhino Service Bus). As the result I may conclude that 2h is not enough for it. Will conduct once more, 4h-long this time.

The following example was used to describe event-driven system, and I am not sure if it was ok. Need to revise whole presentation.



- Introduction to UML. Actually, this was the easiest one. I spent about 5h to prepare it (a dozen of slides and a lecture plan). It was the nice one! :) Hope that it will be estimated with high scores! :)

The plan was simple: need to provide UML in scope which is widely used by developers.

I stressed that UML is useful for developers for communication purposes and provided UML in terms how to describe both static and behavior aspects of any system.

Static:
- class diagram
- deployment diagram
- component diagram

Dynamic:
- sequence diagram
- interaction diagram

Several examples were provided to establish connection between diagrams and codebase.

Wednesday, November 21, 2012

Event-Driven Architecture Presentation completed -- first round!

Провел презентацию Event-Driven Architecture, ушло 2 часа.

Подготовка заняла 16 часов.

Много примеров из жизни, но все же несколько сумбурно. Думаю, в следующий раз необходимо теоретические основы и примеры из жизни сократить до 40-30 минут, а вот практики -- побольше!

Обнаружилось, что присутствующим собственно эта практика в наибольшей степени интересна.

А вот послезавтра, 23 ноября, буду проводить новую презентацию, по UML - Introduction

Придется поработать над практическими примерами! :)

Надеюсь, все успею сделать как надо.

Monday, November 12, 2012

Agile.by | agile сообщество Беларуси

Agile.by | agile сообщество Беларуси

Why don't visit this event? It would be interesting! :)

Another TDD session is coming soon

Another TDD session is coming soon.

I prefer to gather not more than 10-15 listeners at the same time which gives me much more responsive auditory.

Feel exciting about it.

Let's bring some brightness to the world!


Thursday, November 8, 2012

First ever BDD presentation in progress

Yesterday I provided the first part of BDD presentation.

It goes quite smoothly -- most of the people were quite responsive.

I represented BDD this way:
  • revise SCRUM workflow and point out TDD place in it
  • outline TDD "built-in" drawbacks (like Unit Tests != specification)
  • introduce the idea that we can actually use specification as a base for our unit tests
  • Reconsider testing as a whole -- we should test feature rather than a particle unit of code
  • Point out that BDD specifications can be used for communication around all people involved into development process
  • Implement a simple system (POS) as an example in BDD way (using SpecFlow .Net framework)
Yesterday I stopped on the last point -- it seems that 2 hours is engogh to provide BDD ideas, but not enough to show it in action.

Today will finish it.

Wednesday, November 7, 2012

BDD with SpecFlow Presentation

Tomorrow and a day after tomorrow I will be providing BDD Presentation.

Doing it at first time (not counting that small session done by my while I was working for Target Process), feel a bit nervous -- more than 20 people, current EPAM employees, will be here.

Good luck to me! :)

Tuesday, November 6, 2012

BDD Training Session

in two days I am supposed to lead the BDD training for EPAM employees.

There are about 70 people who already subscribed to it, so about 20 developers were chosen to participate in this session.

Need to spend a few hours on preparations :)

Consultant Career

From time to time I am thinking of Freelance Consultant career. May be in a few years I will be ready for it, but not now.

I am still not sure whether I am skillful enough to provide such trainings.

Would be nice to have a look at active consultants's blogs to see how they handle this job.

Helping to spread useful techniques

That's interesting thing: it's almost 5 months as I don't have any projects here, at my workplace.

Firstly there seemed to be a position on new project, but then it was decided not to introduce me.

It allowed me to apply my skills on codebase analysis but then I became available for another projects again.

So I decided to help out my company and proposed the following topics for training sessions I can teach:

Behavior-Driven Development in action
  • Discover next evolutionary step in TDD – Behavior-Driven Development (BDD). In this training you’ll know how not to miss any of customer’s requirements and transform them into a form of executable specifications, which can be used for collaboration purposes between customers, QA and developers.
Test Driven Development in action
  • this training is dedicated to the Test-Driven Development technique. How to not to spend much time on debugging? How to design convenient-in-use API for your class structure?
This live coding session will answer two main questions: WHY every developer should be at least familiar with this technique and HOW it can be implemented in real code. NUnit will be used as a unit-testing framework.
Mock Object Frameworks in unit testing: how to use and when
  • Those who familiar with TDD &pamp; BDD would like know how to practice it more efficiently: This live coding session will demonstrate how to test pieces of code in isolation of the rest code with using of mock object frameworks.
Event-Driven Architecture (EDA): Overview
  • The training introduces in event-driven architecture principles. Contemporary world is event-driven, so often our software can be implemented using event-driven architecture principles in the most efficient way.
When EDA can be applied? What considerations can be taken into account and how actually it can be implemented with using of real EDA framework – that questions will be answered here. NServiceBus EDA framework will be used for demonstration.
Introduction to UML
  • Unified Modeling Language (UML) is a common language which is used for communication purposes among professional developers. How to share architecture? How to describe static structure or dynamic aspects – this presentation is all about it.

It's been a week as I am doing them.

It's interesting thing, but most people are interested in TDD. I supposed that it would not be so popular, but for now I have given two TDD sessions and one Mock Object Frameworks session.

Now I think that I will be spending my next couple of months (before I move to the USA) on that sessions, and I like it :)

P.S. I asked Vladzimir Tihon, the lead of .Net Lab here, at EPAM, whether his students need CRC card session, and he agreed that it would be nice.

I think that I need to prepare for it as well :)

Any more topics are welcome!

Thursday, July 5, 2012

BDD Spec Public Repository -- is it possible?

Looking back to my BDD experience, I remember that once we did massive refactoring (actually, it was rewrite process) having only BDD specs on hands (it was routing subsystem with access rights subsystem taken into account).

As the result we were able to rewrite 'from scratch' functionality with those specs with now problems.

Now I see that this experience can be spread to the most of well-developed problem areas: we can describe the most functionality via BDD specs, and share them.

Having such specs on hand, it is possible to write own implementation on different languages.

I will think this idea over :)

Wednesday, February 22, 2012

Job applicants and archiectural skills



This time we are hiring. The skillset is quite simple: problem-solving, architecture, c# and some client side javascripting.

You know what?

One of four developers Is problem-solving type and can describe a solution for given task from scratch (last time i've asked to provide sample plugin architecture for .net windows forms).

But I still believe that my next candidate will be ok :)

I know that some interviewers concentrate on c#/javascript language knowledge.

Some interviewers prefer to test architecturing and problem solving skills barelly touching language related issues.

I prefer to follow the last approach because often i see developers who do really know language syntax but their code was awful: lack of abstractions, pure testability, and almost all s.o.l.i.d. principles are not taken into account.

Today a couple of my collegues and me conducted an interview with a candidate. He has more than 3 years in development and seems quite smart, but has lack of architecturing and problem solving skills.

So my answer on question 'are we going to hire him?' was 'no'.

Hope next candidate on friday will be much better (looking at his cv i can hope)

Friday, February 17, 2012

Test-Driven JavaScript Development


I was suggested to have a look at this book:



I revised it.

I believe that this book is worth to read, especially by developers who has a deal with  tons of javascript code on daily basis.

Description:

For JavaScript developers working on increasingly large and complex projects, effective automated testing is crucial to success. Test-Driven JavaScript Development is a complete, best-practice guide to agile JavaScript testing and quality assurance with the test-driven development (TDD) methodology. Leading agile JavaScript developer Christian Johansen covers all aspects of applying state-of-the-art automated testing in JavaScript environments, walking readers through the entire development lifecycle, from project launch to application deployment, and beyond.

Using real-life examples driven by unit tests, Johansen shows how to use TDD to gain greater confidence in your code base, so you can fearlessly refactor and build more robust, maintainable, and reliable JavaScript code at lower cost. Throughout, he addresses crucial issues ranging from code design to performance optimization, offering realistic solutions for developers, QA specialists, and testers.