F# Samples

If you had the chance to start playing with F#, here are some nice challenges  for you. If not you may want to look at from where to start.

1. Dustin Campbell, has started Project Euler questions on his Yet Another Project Euler Series. There are 283 questions at the Euler project. To give the idea, here are the first three ones:
Problem 1:

If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23.
Find the sum of all the multiples of 3 or 5 below 1000.

Problem 2:

Each new term in the Fibonacci sequence is generated by adding the previous two terms. By starting with 1 and 2, the first 10 terms will be:
1, 2, 3, 5, 8, 13, 21, 34, 55, 89, …
Find the sum of all the even-valued terms in the sequence which do not exceed four million.

Problem 3:

The prime factors of 13195 are 5, 7, 13 and 29.
What is the largest prime factor of the number 600851475143?

2. If you are into numerical analysis, you may try Newton Basin Fractal, i.e. finding roos of a polynomical function in a complex plane, you can be inspired by Jonathan Birge did:

Image

3. Using Accelator Library, Tomas Petricek has some Game of Life example , which implements Conway’s Game of Life. There are some more including Calculating PI, Data Parallel. He is the co-autohor of Real World Functional Programming.

I am curios to hear from you, any suggestions/links you want to add?

Interview questions should be presenting your domain!

You need someone, and you had spent enough time on the job spec, to identify the details of the practices/skillset you need. Either those skillset matches what you are doing right doing, or what you want to achieve. In this blog, I will go a bit deep inside to show a more deep insight to the both sides’ feelings.

Matching is a word I use for the technology knowledge and practice knowledge matching.

Knowing X,Y technologies/languages/platforms does not necessarily that person can fit into a set of software development practices, vice versa works true also.
A. If you are a market leader/first implementer technology company
If you want a .NET developer, implementing TDD; and all the interview went theoritical concept of talking, probably you have missed a couple of things during the way

You might chance of getting the right person that could fit in, but you were not aware of it…

Let’s say you are asking the candidate to write a piece of code to calculate 5! and s/he writes it. So was that all about? Writing a recursive function to calculate 5 factorial. This is the first homework/example that an undergraduate/high school level person can answer. And believe it does not tell anything about the candidate [unless the candidate takes it seriously and writes a framework for it.]

It should not be set of questions because some people are selling them, writing books, or Scott Hanselmann listed, actually not someone else’s question, it should presenting your domain, your own challenges!

Please do not ask/expect for output caching as a response to “if a page is getting lots of hits…” Ask types of caching and when to use which …

You have adversited the skillsets your team has, and the practices those you are following [either with best practices/or not].

Markhneedham argues that if you are implementing pair programming, why not you have pair-programmed interview?

I will keep the same argument, and continue:

– If you are/want implementing TDD, why not ask the developer candidate to write TDD tests beforehand the code. If you are insisting on 5! Give three pages of blank papers, and see the talent there!

– If you want to see how experienced the developer is, like how he/she can cover the code,

Ask to write some unit tests, if not all, ask her/him to list the tests s/he would do.

B. If you have one client on a specific industry or you are the enterprise company dealing with only one industry:

If you want to see how experienced on that domain/industry, ask an existing project and see how he/she would think about it. Do not ask 5!, unless you are doing lots of recursive functions, functional programming. Let’s say you are in retail, ask about how a checkout can work, how the delivery address can work best with sessions objects, or product page can benefit from new technologies like silverlight/flash, does s/he has any experience on those domains, and what does s/he thinks…

– For more senior positions, ask about the architecture for your latest project. Which patterns could be used to start a nice discussion to see the depth.

You may not need depth, the people asking questions may not be interested in details and whys, but after a fixed keyword to hear, who will stop listening after they catch that.

And HR can have hours of competency tests similar to GRE/GMAT/Belbin questions on top of that, so without seeing you, they will judge you with you test results…

I tried to tell the points where you should stay away…

Twisting Job Search Process

When the time tells you need to change your job, you start to look around. The first action can be

a. going to a job board, like monster or totatljob, which will help you to understand the market needs and rates.
b. ask friends if they have a job at their companies.

Andy Lester on his book Land The Tech Job You Love was referring a stastical data which tells that percentage of people getting jobs from job boards was %11. The rest of %89 people are finding jobs through communication.

Whatever the way you prefer, you need to analyse yourself, and to decide what will make you happy is the main goal of this article.

A. Before the Interview

a. Updating your cv

Reread your CV, would you find it clear, and easy to read if your were a hiring manager?
Make sure you describe the roles and responsibilities you have been involved in, what value you have added to your previous jobs The technologies you have worked with is not going to add points towards you if they are standing alone without explanation. Make sure the use of those technologies were solutions to certain problems. It does verify you know what you are doing, and you face a similar problem in future, you know how to take action.

b. List what makes you happy
I find three important things about a job: the people you work with, the projects you are involved in, and your role. Tell yourself what kind of people you like to work with. The culture of the companies decide the communication between the employees. So it can be formal or informal communication going on. Decide on which end you feel more comfortable.
The projects can be short or long, client based projects or internal projects. Depending on your experience, you can identify where you are comfortable.

Imagec.  List the items why you need a change, i.e. the things you do not want to do at your next job.
Write down all technologies, projects, problems. Being aware of them will help you during the interview process.

B. During the Interview

Aaron Erickson on his book Nomadic Developer got detailed explanation about the his experience through consultancy companies he has been involved in for years, and he categorizes the firms into seven, talking about positive and negative side effects, namely seven deadly firms. He has nice tips about the interview questions.  Here I will list the ones that I see as important,

a.  Human-based factors

– How do they learn new technologies [Do they attend/create any seminars, trainings, events internal?]
– Are they motivated to take certifications/go to external events/seminars [Devweek, QCon, Techdays]?
– How do they share what they have learnt about the business, projects, experiences internally [Do you have any wiki, sharepoint, internal site/structure to share/store documentation]
– How do they communicate/are motivated? [team events, afternoon teas/beer nights, teambuilding events]
– What would they want change if they were given a chance to improve one thing?

b. System-based factors:

– Do they a competitor product/company doing similar projects in the market [If yes what kind of analytics they use?]
– How do they improve your products/processes, any regular feedback session with clients/team members?
– What would their clients [internal or external] suggest as the best improvement for the project,
– Are they implementing any process like Scrum or kanban? As version controlling system, what are you using? How regularly code deployments happen?
– Do they have a mature process for project lifecycles?
– Do they have a roadmap for the technologies they will use and projects they want to start/finish?

So, you can have the idea of the company, where you can feel you can add value and be happy together. As Andy Lester says,

It is a relationship, being open and honest will make the relationship long lasting.