Shani added me to his tagged list, so I'll try to answer this question. As an introduction to the answer I have already defined what a good developer in my point of view is.
Things I should do
- Blog posts – I must write more posts for my blog. I'm a perfectionist guy, and because of it, it is taking me a long time to publish a post (I am thinking a lot before I publish each post…).
- TDD – I know the theory but I really should take more practical practices in this subject.
- Workplace - As I have already posted, I really need to find a good job. You are probably asking yourself how I define a good job?
- A workplace with professional co-workers.
- Find a system or product which interest me and I believe in.
- Develop with the most new MS technologies.
- Free mind – listen and improve new ideas, technologies, designs and etc.
- A place where you can progress, learn new cool things. A place where I will become a better programmer, a place which will invest in me.
- A good salary (salary that you can sleep well in night with it).
- Spend more time with my family (Especially with my wonderful baby) – Its help me to be more relax in my job.
Things I want to do
- Rank - To improve my rank in a searching engine (Google & Microsoft) – It maybe sounds funny, but your position in the searching engines is an important thing. There are companies (and "Headhunters") that check this rank before they hire you, and it's really can help you find a good workplace. In my case I have some other people with the same last name ("Wortzel") and therefore I have a hard time to get up in the searching result.
- Books - Read more good technologies books (Like "Framework design guidelines", "Writing secure code", "Rapid development" and etc.).
- LINQ – Take a deep explore in this smart and sophisticated framework, and write some small application with it. Learn about its integration with ASP.NET in the upcoming .Net 3.5 release (Cool new controls like the asp:LinqDataSource control), and of course to publish some posts about it.
- WCF –Learn all the options of this technology, develop some services with it.
- Silver light – Get into this cool technology and to develop some visual controls. (b.t.w in my final project in my B.Sc studies I have already developed an application with it, but it was only with a basic using).
Things I won't do
- I really don't want to leave the programmer job (At least, in the next couple of years), even thought I want to become a manager in the future.
- There is no way to leave the Agile family methodologies (especially Scrum) – with all their practices.
Life is very short – love what you are doing, and if you don't like it – Change it (Or just find better things to do).
I tried to think about the most 5 important characters, in my point of view, which can describe a good programmer and here they are:
- The ability and the desire to learn new things by yourself. Not because somebody tells you to do so, but because you want it!
- The developer should be creative and with open mind. In the same time he should be able to accept decision that others made.
- Be a team-worker: work together in a team structure, be patient to your colleagues, help them when they need it, teach them what you know, listen for what they have to say (and give them a compliment), always think about the integration phase, always be aware to the fact that your code will be used as an API for someone else. Write descriptively code, add comments when you need to, and always keep on the team development standards.
- Always share your knowledge with your technology environment (Lectures, code reviews, small talks, and etc).
- Love the technology – it's your first wife (Bali [my real wife] – after you of course :) ).
One of the common options to synchronize several distributed sql servers to a central Sql server 2005 is by using Remote Data Access Synchronization (RDA).
I needed to check this option for one of my project.
What does it give us? How does it work?
The RDA tries to give us a solution to access data that stores in a central Sql server form local db's (Sql server mobile and Sql server compact edition databases). It includes a tacking engine that stores all changes in the remote db and pushes it later to the central Sql server. This architecture includes a pull option – when the central Sql server updates the locals databases. The synchronization works over HTTP.
So here are some pros vs. cons of the RDA:
There is a performance hit when using RDA, because it works with the OleDB provider (The Sql Server data provider gives us a better performances).
The RDA isn't giving us a complete solution for security problems. Although local databases isn't opening a direct connection to the central db, all the local db's hold the central db connection string.
· Support & future development:
The RDA is at a maintenance phase, Microsoft isn't planning to develop it any more (But don't worry it will be supported in VS 2008). The next technology is called "Sync Services".
· Easy to use\Rapid development:
The API is very simple, just do this sample and you are in.
· Decrease the development cost:
This is a good & tested technology – so why not?
· Protocols supported:
RDA works on the HTTP and HTTPS, you don't need to implement a special protocol over the network layer.
As I mention before in VS 2008 Microsoft develop a new and a better technique to do this job (that called "Sync Services"). It is based on ADO.NET with caching option and completely supported WCF.
Want to learn more? Read Steve Lasker's Web Log.
Want to see who its work? Look in Steve web cast.
One of my last missions at my former workplace was to lead a usability testing. We chose to do those tests for new services, that where written by Nati in WCF technology.
Please prepare yourself because I'm going to share with you some of my work.
Usability testing purpose:
The main purpose for usability testing is to measure the comfortable when using a public API. These tests should be run on specific component or small number of components with high relationship between. The measure will make by watching other people that using that API. You should notice to their comments, behaviors and fillings when they had written that code (And not just asking them "Is this API is enough understandable?").
What we need to test?
In usability testing we should check four things:
1. Time to accomplish the task – How much time it took to the user to accomplish this task.
2. Accuracy – How many mistake the user made until he accomplish the task?
3. Recall – Check the users memory about how to using this API.
4. Emotional response – What are the user fill after he finish the task (confidence\ Nervous, will he give a good recommends on this API to his friends?)
The Usability testing phases:
First phase – prepare the tests
1. The first thing is to make sure that the API is ready.
2. Scenarios - Write some real scenarios that uses this API. These scenarios should be simple and short. Each scenario should be written on a separated page. For example: We develop an API to add an attachment to mail message. The scenario will be: Create a new mail message with attachment and send it.
3. Running tests planning
a. Each test should be no longer than half hour.
b. It's really recommended to start with some simple tests (Its will give the user good fillings and improve his productivity).
c. You can return on the same test twice (It's will be better if you change the test explanation).
d. Publish a details schedule to the running tests day.
4. Write a basic documentation for this API but without a details example how to use it. You should publish the documentation to the testers a few days before the tests will occur.
5. It's highly recommended to create a series of questions. Ask them during the running the tests process.
Second phase – choose appropriate resources (testers & environment)
1. Choose 5-6 programmers to run the usability testing. These programmers should be unfamiliar with this API (from the "Hallway usability testing" methodology).
2. The tests execute in the natural environment of the testers.
Third phase – running the usability tests
1. Before your tester starting the tests, you should give them a short briefing. The briefing will contains some instructions like:
a. Explain them that the purpose for this session is how mach this API is easy to use and not how much they good programmers.
b. Ask them to speak loudly and to share all theirs responses, fillings and everything that come up (Part of the "Think aloud protocol").
2. Don't help them! Remember that the API isn't including you as an on-line helpdesk resource. If the tester stuck, you can show him the global way in order to continue in the next tests.
3. Ask the relevant questions (That written in the preparation phase) and remember to document it.
4. You can record the running tests process (Example to implementation of the "eye tracing" method); it does can help you to collect the feedback.
5. Try not to tell when the tester need to move to the next task, let them handle their time.
6. Prepare yourself to get a lot comments about that the API isn't so perfect (As you thought before…).
7. Enjoy from been viewer! It is really fun and will cause you to be better on what you are so loved to do.
Fourth phase – Feedback Analysis
1. Summarize all feedback that you got from the testers in one big table (Excel will do this job wonderful). The table should contain the parameters that I mentioned before (Time to accomplish the task, Accuracy, recall and emotional response).
2. Now it's the time to make the decision about the things that we are going to fix.
3. In this phase you should write what you learnt in this process.
4. You should notify the testers about all the things what fixed from their feedback.
If you want to learn more about Usability testing try these references:
In last month I lectured at my former work about LINQ.
The lecture included these subjects:
- What is LINQ? DLINQ? XLINQ?
- An introduction to the LINQ project
- Some of the new C# 3.0 features(extension methods, Lambda expressions )
- LINQ to objects
- LINQ to SQL
- And a lot code samples…
You can download the lecture presentation and code samples from the attachment.
I promise to write some posts about this subject...
After 7 years I left my job. At my previous workplace I got my first qualified as a new programmer, after a while I became a senior developer. At the last two years I served as a team leader. I found good friends in my last workspace, and I'm sure that this friendship will last years ahead.
These days I'm finishing my B.Sc in computer science.
I'm entering a new phase in my life, so I have decided to take a short vacation to Italy (You can take a look at some pictures here).
And now I'm looking for a new job…
This is the time to wish me luck! :)