jQuery Image Gallery
Reminder: Blog Moved…
Blog Moved…
Blog has been moved to: Click here for new location
Enhance Your Technology Career By Learning To Speak
Have you ever had a customer, co-worker or manager look at you as if you had two heads? When an IT Professional, speaks it is very important that who we speak to understands what we are saying. You cannot sell an idea, explain an issue or develop a project plan if you who you are speaking to does not understand. The use of jargon is the biggest obstacle that IT Professionals face. Continue reading
Last is King – Back To Basics CSS
CSS is the basics of HTML styling, but I am finding out that somehow it is missed. It’s hard to be a Web Designer without knowing how CSS style sheets work. For those who do not know, CSS is short for Cascading Style Sheets. If you can picture a waterfall, that is basically how CSS works. Continue reading
Clean Your Desk and Your Office To Stay Focused
A Clean Desk Is a Clear Mind. How can you be productive with a messy desk? Than answer is you cannot! A messy desk is a major distraction to you. A messy room is even more of a distraction. It inhibits your focus that you are trying to apply to your work. Continue reading
We Do Not Know You
I have encountered the phrase “We Do Not Know You” a few times during the job hunting process. Recently I interviewed with a company that used this phrase. I threw everything at them including LinkedIn Recommendations, Contacts, Resume, Cover Letter, Links to Code Samples and screen shots. This was not enough. Continue reading
Keeping a Cool Head
Recent events at work caused 3 days of fire fighting to keep systems going. It was a lot of work and was not easy. Stress levels were at an all-time high. While showing the rest of the staff that I was dedicated to fixing the issues, I managed to keep a cool head and work systematically. It’s not easy to keep a cool head, but a lot more problems can occur if you do not. We had one incident when I was in a meeting, a mistake was made that cost me a loss of 2 hours and it could have been prevented by pausing for a second. Continue reading
Senior should be a Junior for a Day
There are times where a Senior Developer should take a step back and become a Junior Developer. There are times when a Junior Developer can teach a Senior Developer new skill, thoughts and patterns. Granted there are a fair number things that Senior Developer can teach a Junior Developer. In this blog I will discuss why a Senior should become a Junior – for a short time. Continue reading
Getting Out Of My Comfort Zone
I have often lived in my own little bubble as most technology-geek-type people do. I hardly stepped out, stretched myself and joined the world outside. In the last little while I have had the opportunity to expand my world and I took it. I was asked to attend a networking function with a friend. I had probably met a half dozen professionals from various disciplines. Again this week an opportunity arose where by offering to help pay for a website renewal, I had the opportunity to hide in my bubble and pay with PayPal or go hand deliver the money and meet someone new; I chose to meet someone new. Continue reading
What I Have Learned
I graduated college in 1996. This was a great year for me. I moved home where I was fed and loved by my family. I worked for a small software company doing Visual Cobol who went bust. I was a hard worker and never said no to an opportunity. When the company went bust, I worked at a local concrete factory until I got into a factory automation job. Now I am where I am and boy did I learn a lot. Some of what I learned is from making mistakes and some I learned by mentors and leaders in my life. Continue reading
Welcome to London Ontario
Hey London; We live in a great city. We are full of excitement, technology, festivals, markets and home of some of the best mom and pop restaurants. Continue reading
IT Professional and Communication Skills
It is a well-known fact that Information Technology professionals are often lacking skills in the communication department. Almost every job posting lately had stated you must have good Oral and Written communication skills. This was not me; at least until recent. I was always the guy standing by the punch bowl or snack table with hands in the pockets that said “HEY” as people walked by. IT professionals often confuse colleagues, friends and customers with their acronyms and tech-lingo – I was one of these people. Then I was pulled out to a Toastmasters meeting. Continue reading
Giving Back
It is important to give back to the community in some way. Your community may vary from other people’s, but it is a great way to create awareness of charities you believe in, your company’s good deeds and create balance and fun for your employees. Giving back also shows your employees the importance of supporting local charities and groups. Continue reading
More Than Meets The Eye
There is more than meets the eye with me. On my resume it is majority Microsoft skills. Microsoft is used more than open source because that is what my work and customers demand from me. Can I do more? Yes! I have experience in a lot of open technologies such as PHP, MySQL, Python and more. I do use these technologies, but not often Continue reading
Do Not Forget The Customers
New developers often design and develop what they believe is cool and cutting edge. What is forgotten is how the customer or the user will think about the experience. If the customer or user refuses to accept what you have built, you have just wasted time and money. Potentially you are out of business. Continue reading
Do I Need Source Control
Yes! For the first time in my 15-year career I had experienced what it is like to not have source control, and I had hated it. I had lost a very difficult to write SQL statement in a project. It seemed almost impossible to rewrite the SQL for the second time. I believe it was two of us working in the same project that had caused this loss of code. I take the blame because I am the manager and I knew that source control was not implemented. I should have taken the time to take all of the projects and check them into the source control system. Continue reading
Development Servers
What is a development server?
A development server is either a physical or virtual computer that is dedicated to the art of software or web development activities. It should be as close to being the same as the published web or software as possible with the exceptions of having the changes that you are working on.
SQL Pagination
I have often encountered the culture of query for thousands of results, estimate the paging and then only display a small segment of the results that were retrieved from the database. This is particularly bad in a web environment. This results in the following issues:
- A large amount of data to be transferred from the database to the website
- Longer than necessary database queries
- Script Errors and timeouts
- Frustrated users/customers
Fantastic Speech! When You Want to be Successful as Bad as You Want to Breath…
Should Children be Taught Cursive Writing
Cursive writing is the linking of hand-written characters. It is the penmanship that was taught to us in school after we learned to print. Some will argue that it is an old irrelevant craft due to the modern us of technology; after all, when was the last time you received a hands-written letter in the mail? It is a fact that we do not use hand written notes very often. In meetings, I bring my iPad, accounting we use computers and letters received are either written on the computer and printed or sent by e-mail. Continue reading
Journaling
Journaling is something that I have been doing off and on for a while. I journal using low-tech methods. I have a leather bound book and a nice pen. I love my pens. I used to have fountain pens, but I have no idea where to buy the pens or ink anymore. I think chosing my low-tech method is more appealing to me since everything else I do is high-tech. There is something to be said about mixing things up a bit, and I believe it makes my journal time more my personal time. Continue reading
Programs on my IPad
I often get asked what I use my iPad for. I tend to use my iPad for more practical things like:
- Web design
- Blogging
- Task lists
- System remote access
- Reading books
iPad 3 – My Thoughts
Being the owner of the iPad 1 and the iPad 2, I thought it was only appropriate to follow the launch of the iPad 3. The iPad 3 launch was brought to the public with high anticipation. Despite the launch of the iPhone 4s, this is actually the first big launch without our beloved Steve Jobs. The new release did not quite live up to Steve Jobs’ flair for a product release.
New Appreciation for Apple Products
A few years back, one of my customers sent my wife an IPad. There was a note that had said Happy Wife, Happy Life, You keep me happy. From that point our lives were changed for ever. Up until this time our house was 100% a PC family.
Continue reading
Social Media Success and Failures
Social media if used correctly can be good. If used incorrectly, can distract or damage your business’ reputation. Often what can go wrong is having a person with their own agenda rather than that of the business. Personal or in appropriate information can sneak into the companies social outlet and eventually bring down the professionalism. Inappropriate material such as videos, jokes or articles can distract or damage the reputation of the company. Reputation is everything.
Disclaimer: There are always exceptions to the rules. Find what works for you. If you are stumbling, review these points as they may help.
Continue reading
How a Social Media Can Damage A Company
To read an additional blog with more stories go here additional reading.
Social media if used correctly can be good. If used incorrectly, can distract or damage your business’ reputation. Often what can go wrong is having a person with their own agenda rather than that of the business. Personal or in appropriate information can sneak into the companies social outlet and eventually bring down the professionalism. Inappropriate material such as videos, jokes or articles can distract or damage the reputation of the company. Reputation is everything.
Disclaimer: There are always exceptions to the rules. Find what works for you. If you are stumbling, review these points as they may help.
Continue reading
How Social Media Can Help You Attract Business
Social media is new. It’s vey new, but it is not going away. If used correctly, social media has the ability to boost your web business.
Continue reading
Leaving a Job – Integrity
This past week I had finished my position at an undisclosed company. It seemed to go fairly smoothly. I worked hard all week, tried to ensure my boss was comfortable and tried to fix as many issues as possible.
Happy New Year – 2012
Wishing everyone a Happy New Year – 2012!
New Year – Fresh Start
2012 is a new year and for many, a fresh start. I see 2012 as an opportunity to do something new, start fresh on other items and a chance to turn a new leaf. Often, your colleagues, bosses and friends whom known you for a long time and will not allow you to turn a new leaf; Do it anyways! Push forward in making yourself a better person this year. Do not let others hold you back. This is your chance to rid yourself of bad habits, learn something new, implement new ideas and grow as a person. Continue reading
Websites Responsive to Screen Size
I own a desktop, laptop, iPad and an HTC Android phone. Each device has a different screen size. I had never tried my website on the iPad and the Android phone until after the DIG 2011 conference in London Ontario. Jeffery Zeldman and Derek Featherstone spoke on the importance of having your website visible on multiple devices and this struck home to me. Continue reading
Driving to Your Goals
Monday night at London Western Toastmasters, I gave a speech about getting the momentum going. It was geared to getting used to speaking, getting in front of the club and practicing. I had equated it to driving a 5 speed transmission car. When we start looking at our goal, we are stuck in neutral. Continue reading
DIG London in Review
Wow, what a great day to be had.
I had attended the web developer stream of DIG London which started off with a Keynote by Jeffery Zeldman. Jeffery had shown us the importance of responsive design and suggested a few ways to look at it. Continue reading
Be Kind to Those You Meet
You never know when you meet someone what they will be to you in your life. You may meet them in a service club, be a customer of yours, be a friend or an in-law. You just never know when that argument with the sales associate be something that bites you down the road. Continue reading
My Cover Letter
Dear Business Owners, Team Leaders and Information Officers;
I am not just a developer. I am a developer who can blend in with a team, lead a team and be part of a team. Continue reading
How I Achieved Decent Search Ranking
I recently showed my hit stats for my website to a friend, which include the GOOGLE and Yahoo queries. I was asked how I achieved my ranking. I typically see a rank between 3 and 20, which I consider respectable. Most of my ranking is under 10, which is really good. I am actually surprised how people find me as it can be a very obscure search.
Could it be better? Probably, but this seems to work for me
Example ( real rankings 11/03/2011 ):
Ranking 22: http://www.google.co.uk — c#/ .net blogs in london + cv
Ranking 02: http://www.google.ca — software developer london ontario
Ranking 05: http://www.google.com — how to use equalsignorecase in javascript
Ranking 01: wwww.google.lv — excel interop in web service
Ranking 14: http://www.google.ca — london ontario computer programmer
Here is how:
1. Fresh Content ( Blog, Twitter Feed, Other Dynamic Content )
2. Have description and keyword meta tags relevant to your content on the page ( Each Page should be unique )
3. Put title attributes on links / menu items
4. Put alt attributes on images describing the image
5. Have unique titles on each page
6. Do not use tables to structure your web page
7. Use H1 and H2 tags for page and paragraph titles
8. Optimize your webpage and images for speed.
9. Have a site map ( link page ) outlining links to your content
10. Use GOOGLE’s and Yahoo’s webmaster tools for site maps and analytics
11. Use and understand GOOGLE Analytics tool
12. Have other sites link back to you that our relevant to your site.
13. Use Twitter, LinkedIn and Facebook to promote your fresh content.
Code Reviews
Developers often seem scared to allow another person to look at their code. It is like they have a fear of someone stealing what they had done or that someone is looking over their shoulder. Software developers and web developers often hold tight to their projects. In almost every business work is proof read or reviewed. It is not because a lack of trust, but rather many eyes will catch mistakes.
Why do we do code reviews?
The reason for code reviews may be obvious, but since the resistance it needs to be mentioned. Code reviews are primarily to catch logic mistakes, missing business rules and team coding standards.
When a developer is so close to a project and looks at the same code for days, weeks or months, it is easy to invert logical expressions or entirely miss basic variable checks. Assuming both purposely and by accident that routines return the perfect values is often the biggest mistake and we are suddenly surprised when a NULL value sneaks in.
Often when we start a project we are handed pages and pages of business rules and requirements. It is very easy to miss the small things and even the big things. As easily it is to cross items off a list, it is just as easy to entirely miss one. It is very viable to have a second set of eyes to review what we had just written. Better to catch mistakes before the customer does.
Lastly team coding standards; they are standards that either the team lead or the team together decided they would follow. These standards are to ensure that the team writes the code in the same structure and using the same variable naming convention. Having coding standards allows the team to work together and have the ability to read each other’s code. It allows quick debug and editing by any team member. Without these standards projects would be a wild wild west and would differ from team member to team member.
Types of Code Reviews
- Team Code Reviews – Team members together would focus on a method or a group of methods. The team together would offer suggestions and ideas to enhance the code for which they are reviewing. It is not a time to rip the developer apart, but to offer constructive suggestions. If a developer gets out of line, that person should be asked to leave the room. A projector should be used if available; otherwise printing off the code or have each developer view it on their laptops are adequate methods as well. The team lead should take a leadership role in this method guiding conversation and making notes to send out after the meeting.
- Colleague Code Reviews – These reviews should be done by a senior or a team lead person. The senior can be greater or equal in experience. Same as a team review, everything should be done in a constructive manner. If a senior developer is doing the review; the senior should be assigned by the team lead to prevent a biased review. When the review is complete – the review should be covered in person with all developers involved.
Tips for the Reviewer
- Ask questions, do not make statements
- Do not be too critical, remember to praise
- Be sure you have your company coding standards available as a reference
- Keep the review on the code and not the coder. Do not make it personal
- Keep in mind that there is more than one way to do something
Tips for the Developer
- Remember, you wrote the code, but the code is not you.
- Make a check list of things that are often found in the code reviews
- Be involved in the maintenance of the coding standards
- Always do your best and do not look for short cuts
Building a C-Sharp Class
I have created this example of a C# class to demonstrate one way of creating a basic class cbject representing one employee. This class could be used as a starting point for just about any object.
Take note that there are no business rules in this example. It is of my opinion that you create a basic object first and create a business class second which extends the basic object. In the business class you may put an EmployeeNumber generator, MaxLength controls on the fields, Phone number validation and other rules that may apply based on your business practices. A business class will be demonstrated in a later blog.
You may also want to create a collection class. A collection class or a manager class would manage a collection of objects with Add, Remove, Select, Sort type functions. This too will be demonstrated in a later blog.
/// <summary> /// Class Object Representing Employee /// </summary> public class Employee : Dictionary<String, Object>, IEmployee { // ***********************| Properties |*********************** /// <summary> /// Employee Number /// </summary> public String EmployeeNumber { get { return (String)this[GetName()]; } set { this[GetName()] = value; } } /// <summary> /// Employee's First Name /// </summary> public String FirstName { get { return (String)this[GetName()]; } set { this[GetName()] = value; } } /// <summary> /// Employee's Last Name /// </summary> public String LastName { get { return (String)this[GetName()]; } set { this[GetName()] = value; } } /// <summary> /// Employee's Address Line 1 /// </summary> public String Address1 { get { return (String)this[GetName()]; } set { this[GetName()] = value; } } /// <summary> /// Employee's Address Line 2 /// </summary> public String Address2 { get { return (String)this[GetName()]; } set { this[GetName()] = value; } } /// <summary> /// Employee's City /// </summary> public String City { get { return (String)this[GetName()]; } set { this[GetName()] = value; } } /// <summary> /// Employee's Province / State /// </summary> public String Province { get { return (String)this[GetName()]; } set { this[GetName()] = value; } } /// <summary> /// Employee's Country /// </summary> public String Country { get { return (String)this[GetName()]; } set { this[GetName()] = value; } } /// <summary> /// Employee's ZIP / Postal Code /// </summary> public String ZipPostal { get { return (String)this[GetName()]; } set { this[GetName()] = value; } } /// <summary> /// Employee's Home Phone Number /// </summary> public String HomePhoneNumber { get { return (String)this[GetName()]; } set { this[GetName()] = value; } } /// <summary> /// Employee's Cell Phone Number /// </summary> public String CellPhoneNumber { get { return (String)this[GetName()]; } set { this[GetName()] = value; } } /// <summary> /// Employee's Full Name ( ReadOnly ) /// </summary> public String FullName { get { return String.Format("{0}, {1}", FirstName, LastName); } } /// <summary> /// Employee's Start Date /// </summary> public DateTime StartDate { get { return (DateTime)this[GetName()]; } set { this[GetName()] = value; } } /// <summary> /// Employee's TerminationDate ( Nullable ) /// </summary> public DateTime? TerminationDate { get { return (DateTime?)this[GetName()]; } set { this[GetName()] = value; } } // ***********************| Constructor(s) |*********************** /// <summary> /// Constructor /// </summary> public Employee() { Initialize(); } /// <summary> /// Employee /// </summary> /// <param name="employeeNumber">Initial Employee Number</param> public Employee(String employeeNumber) { Initialize(); EmployeeNumber = employeeNumber; } // ***********************| Methods |*********************** /// <summary> /// Initialize the Class /// </summary> private void Initialize() { EmployeeNumber = ""; FirstName = ""; LastName = ""; Address1 = ""; Address2 = ""; City = ""; Province = ""; Country = ""; ZipPostal = ""; HomePhoneNumber = ""; CellPhoneNumber = ""; } /// <summary> /// Get Method Name /// </summary> /// <returns>First and Last Name</returns> public String GetName() { StackTrace stackTrace = new StackTrace(); StackFrame stackFrame = stackTrace.GetFrame(1); MethodBase methodBase = stackFrame.GetMethod(); return methodBase.Name.Replace("set_", "").Replace("get_", ""); } /// <summary> /// Re-initializes the Class /// </summary> public void Reset() { this.Clear(); Initialize(); } }
Failure
Failure is an opportunity to find an alternate way of finding success.
Dig deep, learn from the events and change.
Through change, you can overcome failure.
Change brings failure or success; it is a 50% wager.
Evolve, learn and morph with every failed attempt and eventually you will find success.
Importance of Code Refactoring
By continuously improving the design of code, we make it easier and easier to work with. This is in sharp contrast to what typically happens: little refactoring and a great deal of attention paid to expediently adding new features. If you get into the hygienic habit of refactoring continuously, you’ll find that it is easier to extend and maintain code.
—- Joshua Kerievsky, Refactoring to Patterns
I had recently seen the above quote while sifting through some periodicals that I read and it reminded of the importance of Code Refactoring. Refacotring is a mindset that you must put yourself into. You have to decide that you do not write perfect code the first time and that there may be some room for improvement. An hour or two a day may be all you need to review your own code.
I recently spent two hours reviewing code from one of my modules that I had written. It had the same or similar code written in 5 sections in the code and had the same purpose to these sections. Each section had 11 or more lines of code in it. I took one of those sections of code and converted it to a function and then replaced the 5 sections with this new function. Ultimately I had eliminated 51 lines of code out of one module.
Reasons for Refactoring Code
1. Consolidating and eliminating “Like” or “Similar” Code
2. Breaking out a extraordinary long function into more manageable bites
3. Make error trapping easier to handle
4. Make code more readable and maintainable
5. Removing nested IF or logic Loops
6. Make it easier to document
7. Create Reusable code
8. Better class and function cohesion.
The benefits now are the following:
1. Similar code is now the same which is the way it was meant to be ( coded over three days, the code morphed a bit ).
2. Since the code had the same purpose, it looks the same now and behaves the same.
3. Code is in one spot instead of 5 – makes it easier for a base change
4. Error trapping is much more controlled.
If you cannot review your own code ( some people cannot and should not be ashamed for it ), you should get yourself someone you can trust to review the code for you. The do not have to modify the code, they can either insert comments to you, print out and scribble on the pages or meet with you. Never take it as bad thing if someone wants to change your code; take it as a learning experience. If you are using someone else, challenge them back. Make sure they know what they are talking about. A face to face meeting is always a good idea. A mentor, or team lead should be taking on the role of code reviewer. Code reviewer should be recommending ways to refactor your code. This should be done prior to release, deployment and ending a project. The review should always be done with the developer(s) responsible for writing the code. Should never be done without as that undermines the developer(s) and no one learns anything from it.
Sunni Brown – Doodlers – unite
Sunni Brown speaks of the importance of Doodling. She shares with the audience the misconceptions of doodling and why we may fear doodling in public.
What Languages do I Use
I was recently asked what I use to develop software and websites. I mostly use DotNet Technologies as it is often interchangeable between websites, web applications and desktop applications. I can often use the same data access classes and business logic between multiple platforms. I find that DotNet allows me to easier structure objects visually and logically. I prefer to develop using C-Sharp, but I get requests to use VB.NET and J-Sharp on a regular basis.
When I went to college, I had learned C, Pascal, COBOL and some Mainframe language that I cannot remember. Upon graduating I taught myself VisualBasic 3, RPG. My first programming job was Visual COBOL. I had created a company in the Caribbean Islands programming public utility and insurance software in RPG. I can honestly say since I sold my shares of the company, I cannot foresee myself developing in RPG again.
Why don’t I use PHP? Well I do use PHP, but for specific purposes and upon request by a customer. A specific purpose is when I create a WordPress site or other content driven sites. I will not often create a website or web application from scratch using PHP as Microsoft made ASP.NET easy for rapid development.
Do I use JAVA? Yes; I do believe there are cases where JAVA is still relevant. JAVA is still a good tight platform for developing small single purpose applications. I have used JAVA 3 times in the past 2 years for applications that I believe fit the bill well.
Now, I am curious; What do you use and why?
Project Manager – Team Lead – Manager of Development
I have been asked a few times for resources and tips for a new Project Manager, Team Lead, Manager of Development type position.
My tips are a generalization as I can pull out more resources for certain situations.
Tips
1. Have an open door
2. Don’t tell your team everything that you know. Be selective
3. Be positive in all your dealings
4. Lead by example. Do not ask your team to do anything you would not.
5. Speak clearly
6. If a developer says it will take a week, say two. If a developer says a month, say 6 weeks. Always buffer time.
7. Be real with expectations
8. Be kind, not too strict, but strict enough
9. Careful planning of project details
10. Listen to those above you and below you. You will learn stuff from everyone.
11. You are not the end all be all.
12. Fight for those who deserve it, help those who need it
13. Stay Organized
14. Meet with your team weekly with an agenda, so everyone can be prepared
15. Know what your superiors want from you
16. Know your place
17. Make sure you keep developing
18. Code reviews are a must, even yours ( can be fun for the team )
19. Earn your trust, trust your team
20. Know each team member’s strengths and use them. You cannot be everything to everyone
21. Failure is always an option – learn from each failure and success
22. Reflect on everyone project as there is always something to learn
23. Find a mentor or mentors – they can be good sounding boards
Online Resources
http://www.fenman.co.uk/activities/training-manual/team-leaders-development.html
http://andrewtokeley.net/archive/2008/05/02/how-to-become-a-development-team-leader.aspx
http://www.atlassian.com/agile/people/teamlead.jsp
http://en.wikipedia.org/wiki/Lead_programmer
Books to Read
Project Management in a Week By Mark Brown
Survival is Not Enough By Seth Godin
Made in Canada Leadership By Amal; Morissette, Francoise Henein
My Blogs
http://unlatched.com/blog_What_is_Leadership.aspx
http://unlatched.com/blog_Effective_Listening.aspx
http://unlatched.com/blog_How_a_Senior_can_Help_a_Junior_Developer.aspx
http://unlatched.com/blog_Can_Senior_Developers_Learn_From_Junior_Developers.aspx
Remember: Have fun or you will not like it. Take time off – you need breaks.
Shortcut To Creating Properties in C-Sharp – Revisited
Based on my earlier an post, a I had a question about my technique and if there was a benefit, or could you use MethodBase.GetCurrentMethod().Name. Truthfully I did not know the answer until I tried it. I found this new way works, but I also find it is a little tougher to look at style-wise. You need to use stack frames if you nest the routine like I had in my original post.
public class ErrorLogRecord { public Hashtable _hsh = new Hashtable(); public DateTime DateOfOccurance { get { return (DateTime?)_hsh[MethodBase.GetCurrentMethod().Name.Replace("set_", "").Replace("get_", "")] ?? DateTime.Now; } set { _hsh[MethodBase.GetCurrentMethod().Name.Replace("set_", "").Replace("get_", "")] = value; } } public String ErrorText { get { return (String)_hsh[MethodBase.GetCurrentMethod().Name.Replace("set_", "").Replace("get_", "")]; } set { _hsh[MethodBase.GetCurrentMethod().Name.Replace("set_", "").Replace("get_", "")] = value; } } }
Original Referenec Shortcut To Creating Properties in C-Sharp
When a Developer Leaves
To start; I am not saying this is me, but I did talk to a few developers for research.
Employers are often left scratching their heads when a developer leaves. The unfortunately truth is when one leaves another often follows not to long after. It is very hard to understand why the first developer left let alone the second or third. I believe as a employer, team lead or VP, you should know some of the “WHY” for a better understanding of a developer’s behavior. I admit we are a strange brew of employees.
Developers like to be challenged and appreciated. When the challenge is gone, so is the developers will to continue. Developers need to know that they will not be doing the same thing day in and day out. They really need to mix things up a bit. They need responsibilities, new tasks and freedom to try new things on their own. They also need to know they have the company’s support to continue education, and not just a pat on the back. Try to hire from within the team before you look for that new manager. Sometimes you have the perfect leader within the company already.
Developers also have a keen sense of appreciation. They do not need a thank you, or a pat on the back from their employer all the time, but they definitely know when they are being exploited and taken advantage of. More and more companies are introducing foosball, video games and fun activities to show their developers that they can have fun and are appreciated. It is the little things that go a long way. A BBQ in the summer with some good laughs and keep the spirits a little brighter.
These are just brief explanations of why a developer may leave a company, but very rarely is it just for more money. There is often more to it. An exiting interview may shed more light on the “WHY”, but more likely you will never know. An observation that I have made recently; there is a real misunderstanding of junior developers. Junior developers are ones that leave their company the most. Junior developers leave because they are treated poorly by senior staff, paid unfair salaries, no or little vacations and benefits and simply they often do not feel apart of the team. Junior developers add value to any team for a couple reasons.
- Successorship for senior developers
- Brings new ideas and techniques to the table
- They still absorb new information at a fast rate
Why would other developers leave shortly after?
Loyalty is often a factor. Developers are social creatures who form a tight community that is often hard to break into. They often congregate at bars and coffee shops after hours or on breaks to share and implement ideas. This form of interactions creates a tight bond. If a company hires one developer, it is not uncommon for that developer to want to take a few of his trusted colleagues with him. This is a practice that shows the tight bond and trust between the development community. Developers like to work with people they know and trust. It is also becoming a more common practice for the new employer to try to take an entire team of developers that are linked by a common employer or group. This helps create a stronger team.
What Not to Say to a Developer
I was once told that I would never be able to advance out of my position because I was too good at it. These words are like knives going into the heart. A developer likes to be challenged and advance through their career like anyone else in the workforce. Developers are often known to put their heart and sole into their work; often giving 110% of themselves. Advancement is often equal to being similar to being appreciated and/or trusted. Nothing kills a employee’s will to continue faster than words. Chose your words wisely.
Strange Creatures
Developers are strange creatures. They are creatures of habits ( generalization ) and often do not like change. Exception here is developers often embrace changes as in new technology and ideas. When I say they do not like change, they do not like to
move homes, place of work, parking spots, watering holes, etc. They like their every day habits and routines. When a developer leaves it is often a big decision and they did not take it lightly. It is often not a personal reflection on the company, but rather a personal reflection of themselves.
Quick Points
- Find out what other companies are doing to keep their developers engaged and happy
- Talk to your developers often on a personal level
- Create a trust with your developers. Do not give them a reason to not trust you.( Example: monitoring internet usage and emails )
- Give them freedom. Allow them to occasionally work on projects of interest ( Google often does this and then makes money from the side projects )
- Let them use social media to keep connected and build the communities. You do not want your developer to feel isolated. Non-techie people often do not understand a developer
- Do your hardest to create real expectations, and not push crazy hours. Developer burnout is rampant in small companies
- Do your best not to call your developer all hours of the night and every day when they are on vacation. You would not want this for yourself.
- Treat your developer as you would want to be treated
Shortcut To Creating Properties in C-Sharp
I was looking for an easy and consistent way of creating properties for classes. I sometimes find that it can be a long drawn out process creating 5 to 100 properties for database classes. Here is a quick example of what I did.
You will need the following references to make this example work.
- System.Diagnostics;
- System.Reflection;
- System.Collections;
public class ErrorLogRecord { Hashtable _hsh = new Hashtable(); public DateTime DateOfOccurance { get { return (DateTime?)_hsh[GetName()] ?? DateTime.Now; } set { _hsh[GetName()] = value; } } public String ErrorText { get { return (String)_hsh[GetName()]; } set { _hsh[GetName()] = value; } } public String GetName() { StackTrace stackTrace = new StackTrace(); StackFrame stackFrame = stackTrace.GetFrame(1); MethodBase methodBase = stackFrame.GetMethod(); return methodBase.Name.Replace("set_", "").Replace("get_", ""); } }
While this method is probably not perfect and could be argued there is a better way, this seems to satisfy the need. I would welcome alternatives.
Alternate Reading: Shortcut To Creating Properties in C-Sharp (revisited)
What is Trending – Are you listening
Do you know what is trending today? Do you know what is new? Do you care?
As developers we live in a crazy world where technologies and ideas fly at the speed of light. If you are not paying attention you will miss out on the new ideas.
Hash-tags, Twitter, blogs, LinkedIn and Facebook; these are some tools of the modern world and they can help define our chosen professions. If you have not embraced these fore mentioned tools, you will miss out. How are you keeping up? Are you relying on your everyday work or are you digging into the realms of social media to see what is trending? The printed press like magazines, journals and newspapers are not cutting any more because of the pace of change. By the time you read it, it is history.
Social media is trending the new ideas, tools and techniques at a pace that is baffling. If you are a developer and you have not embraced social media, you are probably missing out on a lot of great stuff. Managers are now asking you in interviews; How you are learning new things and keeping in the know? If you are not saying social media as a tool, you would be foolish. It is great to ramble of magazine names and school courses, but most of what is learned there I consider as historical background knowledge; you need social media to enhance your knowledge.
Are you looking for the next great idea?
Here are some interesting trends to watch:
- http://hashtags.org/technology
- http://hashtags.org/development
- http://hashtags.org/social%20media
- http://hashtags.org/software%20development
- http://hashtags.org/ideas
Can Senior Developers Learn From Junior Developers
I relate this back to when you are listening to grandparents tell story after story. Somewhere in those stories you learn from their history. Now when they ask about you, they learn more modern things. Like the time I showed grandpa how to tour castles from my computer. He learned that there was a tremendous amount of information at their fingertips, if they embraced something new.
It is important to listen to each other. We as senior developers have lots to teach, but we also have lots to learn. Most of us have been doing the same thing day-in and day-out. We have learned new languages and new technologies, but not necessarily to the extent of the new developers joining your team. They have recently exited their programs to join the work force. During their college or university days, they had a hunger to learn. Most of them soaked up everything their teach taught them and then explored other avenues and ideas to a greater extent. New developers are little sponges and you never know what they have absorbed during their school. Most after graduation have continued their learning either through their senior developer, through further schooling or simple through other means like reading or internet.
I am a believer that I cannot know everything and that everyone has something to teach me. I have had some very good junior developers show me some cool new tricks. Through those new tricks, I am able to show them how to refine those tricks into something truly amazing. There are some great minds out there.
Remember, today’s junior developers are doing things that we did not even fathom at their age. I went to school with Windows 3.1, OS2 warp and COBOL programming. They went to school with DotNet, PHP and Windows 7 and Linux.
I currently do not have a junior developer working with me, but when I did; I used to have Monday mornings as a sharing time. We would meet in the boardroom (breakfast sometimes) and share what we have learned or done. We also used to discuss issues or choices. We used this opportunity to learn from each other.
Listen to what your juniors have to say. You may just learn something as well as teach them something.
Related Reading: Can Senior Developer Learn From Junior Developers