Stand still and watch the patterns, which by pure chance have been generated: Stains on the wall, or the ashes in a fireplace or the clouds in the sky, or the gravel on the beach, or other things. If you look at them carefully you might discover miraculous inventions. (Leonardo da Vinci)
 

Questions I ask during Job Interviews

March 3rd, 2009 Recruiting| 3 Comments »

In my current job I am responsible to interview new candidates for the developer team. Since this is the first time that I am sitting at this side of the table I had to develop my own system of questions that would lead to the informations I need to decide whether someone is suitable for the team or not.

I want to share those questions:

1. Methodology

  • What is agile software development? Do you know or have any experiences with the agile principles? What is your opinion about agile team and organizations.
  • What is code refactoring? What is it used for? Do you have some best practices how you refactor your code?
  • The topic is debugging: How do you handle bugs?
  • What is Test-Driven-Development? What is your opinion about TDD? What would you say if I tell you that I do not like TDD at all.
  • Do you know design patterns? Did you use them already? What is your favorite one? How do you learn design patterns?
  • What is AJAX? How does AJAX work? What is the difference between AJAX and Web2.0?
  • Can you handle the words cohesion and seperation of concern?

2. Thinking

  • I tell you to learn a new programming language, say Ruby. How do you organize the learning? What will you do first?
  • What would you do if I give you 5 million Euro to launch a start up?
  • What is the most important thing you want to do within the next two years?
  • What is my company, the company you want to work for, doing? How do you figure the underlying technology we’re uisng to do exactly this?
  • Which 5 books did you read last?

3. Common chat questions

  • Do you like google? What do you like about it?
  • What are current innovations in the java ecosystem?
  • It is your task to design a database which holds personal data about some million people. What is the significance of data privacy protection?
  • How did the internet change techologically during the last 5 years? How does the future look like?

4. Java Questions

  • What stands transient for?
  • What are annotations? What are they used for? What is your opinion about using annotations?
  • What are the principles of programming servlets?
  • What is the session scope? Are there other scopes? What are they used to?
  • Tell me about the life cycle of a standard java application and a servlet.
  • Is it possible to use Multithreading in Servlets? Should you?
  • What is the differnce between a stack and a queue?
  • What are the technical principles o a hash map?
  • What are Generics? How do you use them? What is your opionion about generics?
  • Describe the deployment of a Java Application.
  • What is JDBC? What is Hibernate? When do you use them?
  • Why is the main method static?
  • Which impacts does the final modifier have on object references?
  • How do you let the JVM execute some code right before the main method is invoked?
  • What is reflection, what is introspection?
  • What is the basic idea of a java bean?
  • How do you optimize the performance of a loop?
  • What is the difference of a servlet and an applett? What does they have in common?
  • How do you forward a http request from a servlet to a JSP? Which pattern can you realize by doing this?
  • What are the priciple of RMI?
  • How do you integrate some native C-code to a Java Class?
  • What is JUnit and how do you use it?
  • Is it possible to realize a Callback mechanism in JAVA?

5. PHP questions

  • Tell me about arrays in PHP? What are the principles? What do you not like about arrays in php?
  • Can you name some array sorting functions in PHP?
  • How do you write multiple variables using echo? What is the fastest way doing that?
  • What dou think, is PHP object oriented? Why?
  • What is the difference between “1″ and “True”?
  • How do you write to the end of a file?
  • How do you define constants in PHP classes?
  • Is it possible to overload methods in PHP?
  • How do you use callback functions in PHP?
  • What additional features do you think should a future version of PHP provide?
  • What is Zend?
  • What is Pear?
  • What about type safety in PHP? Any opinions?

6. Logic

  • Connect all dots using just 4 lines:
  • There is a town with two hospitals. One is very big, the other is quite small. On one day the newspaper says: 3 boys and 9 girls were born yesterday. What do you think: Which hospital is more likely to have such rates?

7. Opbject Oriented Principles

  • What is the difference between an abstract class and an interface? When do you use the one or the other? What impacts does each have?
  • What do you understand by encapsulation?
  • What is polymorphism? Can you give me an example?
  • What are alternatives to object oriented languages? When do you use them?
  • What happens when you instantiate an object?


Passion for Technology: What is it all about?

February 21st, 2009 Communication, Development, Innovation| No Comments »

I think that Passion is one of the vital skills a software developer should possess. Passion for technology, passion for solutions, passion for progress. Mike Peters has pointed at this tellingly precise in his blog aritcle “How to pick a GREAT Software Engineer“. He writes, that passionate developers are characterized by reading DZone or TecCrunch, testing new software, or writing code in their sparetime:

Love what you do and pass that love to everyone you deal with. Always be positive, energetic and make progress, no matter what. What do you do in your spare time? If you’re not writing code, installing a virtual machine, reading TechCrunch/Slashdot/DZone or testing out the latest version of Windows 7, you are not passionate about technology.

I completely aggree with that. Of course there are things much more important then technology (family, friends, health etc.) but I think that passion in this context just means that technology is not just a job but also a hobby, a hobby which serendipously became ones job. And as a hobby it affects the daily life, the character and thinking. Maybe I can express it that way: A triathlet, a football fan and a technologist (to use a name which expresses the passion more then the title software developer) are on beach holidays with their kids and spouses. The triathlet will go on a beach run as soon as his kids are playing in the water and his wife is relaxing in the sun. The football fan will inform himself about the results of his favorite team. And he will buy newspapers, search the internet, call friends at home or ask other tourists until he knows how the match ended. And so is the technologist. He will pleasurably read a book about an interesiting field of technology at the beach (my beach lecture last year in south africa was The Big Switch written by Nicholas Carr). Maybe he actually will have his laptop with him to check his RSS subsrictions in the evening as soon as his family fall asleep; and some will start eclipse to try a  tutorial about the new framework or SDK. Those three guys have one thing in common: While doing their stuff they feel an inner satisfaction which is motivated completely intrinsic. Friends or their partners only have little understanding and will wonder how one can be that passionate about such an apparantly unimportant thing. But this question is not really important to the triathlet, the football fan an the technologist. Especially for the technologist its just a neat sideeffect that he can make a living with his hobby. To come back to the article I mentioned above: I think that its really important to be passionate about what you do when you work as a software developer or engineer. I made experiences that there are a lot of developers who understand their occupation as nothing more as a 9 to 5 job. In a lot of cases this will be enough. A lot of projects will succeed and they will implement some beautiful systems. But at the end of the day there is no fun and little innovative potential. They will mark time without making progress for theirselfs and on the team they are working in.


10 How-To’s to improve your work.

February 20th, 2009 Knowledge, Websites| 2 Comments »

Yesterday I found an interesting website, which applies the wiki principle on another area: http://www.wikihow.com

This is not about lexical knowledge of the masses but about How-To’s on several fields. As usual in wikis the contents are written and produced (you can find video How-To’s as well) by the community. Another approach on the “Wisdom of crowds”.

Just to give some examples, you could find those 10 How’to’s to improve your professional life:

  1. How-To manage Geeks
  2. How-To be a good manager
  3. How-To develop an IT Change Management Program
  4. How-To establish an IT project
  5. How-To be an effective Project Manager
  6. How-To run an effective meeting
  7. How-To motivate Staff
  8. How-To access useful Web Development Tools
  9. How-To Have successful Open-Source projects
  10. How-To improve your Skills as a programmer