Yesterday I submitted a post complaining about blogging with Blogger. I switched the host from Doteasy to Blogspot, and has resolved most of my issues. So maybe Blogger isn't that bad, but they could improve their support for FTP sites.
There is still some quirkiness though. For instance, I changed my feed setting from "full" to "short" expecting that my feed will carry the first paragraph or two of my posts. Instead the feed shows none of the post. I also can't figure out how to include comments on the main page. And the comments page is styled with Blogger's default color and font scheme.
I have also set my main page to hold seven days worth of posts, but I see that it goes back a month. There must be a setting that I am missing, because the QA of a site like Blogger can not possibly pass errors this obvious.
By the way. I have a new URL for my feed. For those of you who subscribe (both of you) please change the feed to: http://iambillmccann.blogspot.com/rss.xml
Lessons learned from twentyfive years building software, recruiting teams, and managing growing firms.
Thursday, January 24, 2008
Wednesday, January 23, 2008
Blogger Frustrations
I have been using Blogger for about a year. Prior to using Blogger, I published my blog manually by typing html and updating links on the pages. Blogger has made publishing much easier, but there are some things I haven't had the time to figure out.
For instance, I don't know how to write a summary for RSS feeds. It was pretty easy using manual methods. I would simply copy the first couple of paragraphs of my post into atom.xml and I was done. Blogger, though, seems to post the entire article to my feed.
I also struggle with styling. My posting on "How Much Detail in Requirement", for example, switches to the "smallest" type size on the bullet list. I have manually adjusted it many times, but I can't get the text to match. I also struggle with the vertical spacing. Unfortunately, Blogger's WYSIWYG editor isn't all that. Maybe I'll switch to Google Docs for editing my posts.
I have trouble with my template too. I like the top of my blogger pages to match the style of my web site. Unfortunately, Blogger's styles clash with my stylesheet resulting in odd colors on my links. I can fix this manually, but I haven't found the time...so I look stupid instead.
The problem could be related to my host. I use Doteasy to host my blog and web site. Blogger supports richer layouts, but you have to host with Blog*Spot. I'm thinking of hosting with Blog*Spot and using links to connect my blog with my web site.
Of course I'm secretly hoping that someone reads this post and has quick and dirty solutions for my problems.
For instance, I don't know how to write a summary for RSS feeds. It was pretty easy using manual methods. I would simply copy the first couple of paragraphs of my post into atom.xml and I was done. Blogger, though, seems to post the entire article to my feed.
I also struggle with styling. My posting on "How Much Detail in Requirement", for example, switches to the "smallest" type size on the bullet list. I have manually adjusted it many times, but I can't get the text to match. I also struggle with the vertical spacing. Unfortunately, Blogger's WYSIWYG editor isn't all that. Maybe I'll switch to Google Docs for editing my posts.
I have trouble with my template too. I like the top of my blogger pages to match the style of my web site. Unfortunately, Blogger's styles clash with my stylesheet resulting in odd colors on my links. I can fix this manually, but I haven't found the time...so I look stupid instead.
The problem could be related to my host. I use Doteasy to host my blog and web site. Blogger supports richer layouts, but you have to host with Blog*Spot. I'm thinking of hosting with Blog*Spot and using links to connect my blog with my web site.
Of course I'm secretly hoping that someone reads this post and has quick and dirty solutions for my problems.
Are we dumbing down programming?
Her resume looked great. She was coming to us as a high end (price) developer. But as I listened to her describe an abstract class in response to my asking her about abstraction, I had to wonder; have we made it too easy to be a programmer?
It's true that abstraction is the most intangible concept of OOP. During my phone screens of candidates, though, I find myself wishing I had tipped them off. I will be asking about OOP. Go look up "object oriented programming" on wikipedia.
I generally blame our universities for this failure. OOP is largely conceptual, and should be introduced and reinforced by any Computer Science department worth their accreditation. Once in the workplace, software engineers rarely get the proper mentoring on solid coding habits.
We really can't lay blame entirely on universities and trade schools. No, much of the problem lies with the technologies we use to build applications. High on the list of offenders are Visual Basic, Visual Studio, Java, and .Net. Throw in HTML, XHTML, XML, and all the mark-up language derivatives. Then add in any of the web development tools like Cold Fusion and Flash. Of course the scripting languages, JavaScript, VBScript, and Perl virtually prevent solid coding practices.
My obsession with OOP stems from a very specific business need. I have to support ten software products with a very modest staff. The most basic way to accomplish this is by reducing the amount of code. An obvious way to reduce code is reusing code. Unfortunately I inherited a situation based on copy-and-paste code. After three years of fighting copy-and-paste habits, we still support multiple versions of code that perform the same task.
Many developers confuse using objects with OOP. Dropping a control onto a form does not constitute object oriented programming. In fact, there will be nothing reusable in the result. In addition, the automatically generated code written by the action of dropping the control is almost certainly unreadable. But then, many developers today don't even realize code is being generated.
So our tools have dumbed down programming skills. Especially for those developers who rely on the designers and tools built into their development environments (IDE). For me, I'd like to find an engineer or two who would love to create the next Visual Studio, instead of dragging controls from a toolbar like some pre-programmed automaton.
It's true that abstraction is the most intangible concept of OOP. During my phone screens of candidates, though, I find myself wishing I had tipped them off. I will be asking about OOP. Go look up "object oriented programming" on wikipedia.
I generally blame our universities for this failure. OOP is largely conceptual, and should be introduced and reinforced by any Computer Science department worth their accreditation. Once in the workplace, software engineers rarely get the proper mentoring on solid coding habits.
We really can't lay blame entirely on universities and trade schools. No, much of the problem lies with the technologies we use to build applications. High on the list of offenders are Visual Basic, Visual Studio, Java, and .Net. Throw in HTML, XHTML, XML, and all the mark-up language derivatives. Then add in any of the web development tools like Cold Fusion and Flash. Of course the scripting languages, JavaScript, VBScript, and Perl virtually prevent solid coding practices.
My obsession with OOP stems from a very specific business need. I have to support ten software products with a very modest staff. The most basic way to accomplish this is by reducing the amount of code. An obvious way to reduce code is reusing code. Unfortunately I inherited a situation based on copy-and-paste code. After three years of fighting copy-and-paste habits, we still support multiple versions of code that perform the same task.
Many developers confuse using objects with OOP. Dropping a control onto a form does not constitute object oriented programming. In fact, there will be nothing reusable in the result. In addition, the automatically generated code written by the action of dropping the control is almost certainly unreadable. But then, many developers today don't even realize code is being generated.
So our tools have dumbed down programming skills. Especially for those developers who rely on the designers and tools built into their development environments (IDE). For me, I'd like to find an engineer or two who would love to create the next Visual Studio, instead of dragging controls from a toolbar like some pre-programmed automaton.
Thursday, January 17, 2008
Small Company Blues
At dinner with a friend yesterday, he lamented about problems rolling out technology in a firm he is managing. Apparently his team misses their delivery dates; by a large amount. As he described his situation I felt like I was experiencing deja-vu.
His story in brief; he has four people maintaining his technology. These people are responsible for bringing clients online, handling technical problems, and building new capabilities. Projects are frequently months late. A core component of the system is constructed on an antiquated platform (Paradox) and only one individual has working knowledge of the code. And on and on.
This is a very common situation in technology firms managed by "non-technical" people. It is caused by the number one oversight of CEOs who have never worked with sourcecode. I even see it here, at my current firm. The problem is that there is little accounting for maintaining the product. The assumption being, when the product is delivered to the customer, its' developers are free to work on the next thing.This is a dangerous trap and I have seen many very intelligent executives fall in it. Inevitably, the development team becomes forced into choosing between support of the current product and construction of the next. That decision is a no-brainer, and construction of the next thing gets continually put on hold.The solution is fairly simple, but it is a bitter pill for developers. The team must be split, with one group providing support and the other working on the next thing. Of course no one want to be trapped providing full-time support. In my role, I have tempered this morale issue through job rotation. In the end it is necessary to prevent the continuous interruption of new development.
His story in brief; he has four people maintaining his technology. These people are responsible for bringing clients online, handling technical problems, and building new capabilities. Projects are frequently months late. A core component of the system is constructed on an antiquated platform (Paradox) and only one individual has working knowledge of the code. And on and on.
This is a very common situation in technology firms managed by "non-technical" people. It is caused by the number one oversight of CEOs who have never worked with sourcecode. I even see it here, at my current firm. The problem is that there is little accounting for maintaining the product. The assumption being, when the product is delivered to the customer, its' developers are free to work on the next thing.This is a dangerous trap and I have seen many very intelligent executives fall in it. Inevitably, the development team becomes forced into choosing between support of the current product and construction of the next. That decision is a no-brainer, and construction of the next thing gets continually put on hold.The solution is fairly simple, but it is a bitter pill for developers. The team must be split, with one group providing support and the other working on the next thing. Of course no one want to be trapped providing full-time support. In my role, I have tempered this morale issue through job rotation. In the end it is necessary to prevent the continuous interruption of new development.
No Country for Old Men
I didn't see the movie. I read the book. Here's your warning: this blog is a spoiler for the story, so if you plan on seeing the movie, take a pass on this posting.
I finished No Country for Old Men with mixed feelings. Admittedly I found the story riveting, after all I could hardly put the book down once I had started it. Call me soft, though, I don't like when the bad guy wins.
It is fast paced with a riveting story line. The language is simple and boiled down to the basics. There are no flowery descriptions of peoples feelings or dramatic landscapes. Given that most scenes carry a fair amount of blood, this is a good thing. Characters aren't very deep or well developed, or maybe they just don't live long enough to get developed. It's a perfect story for a Coen brothers movie.
One more thing...the book would be easier to read if the dialog was surrounded by quotes. I don't see why a basic grammar rule would be flat out neglected.
I finished No Country for Old Men with mixed feelings. Admittedly I found the story riveting, after all I could hardly put the book down once I had started it. Call me soft, though, I don't like when the bad guy wins.
It is fast paced with a riveting story line. The language is simple and boiled down to the basics. There are no flowery descriptions of peoples feelings or dramatic landscapes. Given that most scenes carry a fair amount of blood, this is a good thing. Characters aren't very deep or well developed, or maybe they just don't live long enough to get developed. It's a perfect story for a Coen brothers movie.
One more thing...the book would be easier to read if the dialog was surrounded by quotes. I don't see why a basic grammar rule would be flat out neglected.
Thursday, January 10, 2008
How much detail in requirement?
I mentioned that over the course of twenty five plus years, I've tried nearly every development process you can name. In my experience, I find that projects tend to break down at the start. Yep. Failure is built in into the project during the requirements stage.
Requirements are written in varying detail. During my tenure with DoubleClick in 2000, we had initiated a project for the advertiser side of our industry. In my ten months with the firm, the document was never finished. The last time I saw it, it exceeded 300 pages. We appointed a steering committee to oversee the project and they would debate the document endlessly. And the result of the debate? A bigger document.
In short, the entire exercise was useless. In parallel to the requirements fiasco, an engineering team was already well into the project, virtually ignoring the written requirements. I have seen this practice of over doing requirements at several firms, including DoubleClick, Information Builders, and Ameritech. In most cases the resulting document is either too large to be useful, or is ignored by the developers.
Of course the reverse is often true too. In fact, the reverse is probably much more frequent. For example, my team recently received the following requirement for a component of a new product:
"Management reports – using multiple selection criteria, produce reports that track turnaround time and other metrics."
Thing about the number of questions that are opened by this simple one sentence requirement. What reports? How many? What columns, rows, sorting, totals? What selection criteria? What is turnaround time? What other metrics? In fact, this requirement tells a developer nothing. There is absolutely nothing the system architect can do except return to the business analyst and ask questions. To make matters worse, the business analyst believe he has provided a useful document.
Then there are requirements that mask the business need in technical details. Some might read something like:
"Add a column to the x table to hold a flag. Display the flag on the detail page. When transactions are received for records with the flag set to 0, ignore the transaction."
This might look like the appropriate middle ground, between the extreme examples illustrated earlier. But it's not. The business analyst has interpreted the business requirement and supplied a solution. Although many business analysts fancy themselves as system architects, I have yet to meet one who is better than the engineer. What is the requirements above? A method of disabling master records? A method to manually override batch operations?
The plain fact is it hard to write useful requirements. And a project with poor requirements is destined for delays and cost overruns. If you wish to keep your requirements meaningful, stick to the following rules of thumb:
Requirements are written in varying detail. During my tenure with DoubleClick in 2000, we had initiated a project for the advertiser side of our industry. In my ten months with the firm, the document was never finished. The last time I saw it, it exceeded 300 pages. We appointed a steering committee to oversee the project and they would debate the document endlessly. And the result of the debate? A bigger document.
In short, the entire exercise was useless. In parallel to the requirements fiasco, an engineering team was already well into the project, virtually ignoring the written requirements. I have seen this practice of over doing requirements at several firms, including DoubleClick, Information Builders, and Ameritech. In most cases the resulting document is either too large to be useful, or is ignored by the developers.
Of course the reverse is often true too. In fact, the reverse is probably much more frequent. For example, my team recently received the following requirement for a component of a new product:
"Management reports – using multiple selection criteria, produce reports that track turnaround time and other metrics."
Thing about the number of questions that are opened by this simple one sentence requirement. What reports? How many? What columns, rows, sorting, totals? What selection criteria? What is turnaround time? What other metrics? In fact, this requirement tells a developer nothing. There is absolutely nothing the system architect can do except return to the business analyst and ask questions. To make matters worse, the business analyst believe he has provided a useful document.
Then there are requirements that mask the business need in technical details. Some might read something like:
"Add a column to the x table to hold a flag. Display the flag on the detail page. When transactions are received for records with the flag set to 0, ignore the transaction."
This might look like the appropriate middle ground, between the extreme examples illustrated earlier. But it's not. The business analyst has interpreted the business requirement and supplied a solution. Although many business analysts fancy themselves as system architects, I have yet to meet one who is better than the engineer. What is the requirements above? A method of disabling master records? A method to manually override batch operations?
The plain fact is it hard to write useful requirements. And a project with poor requirements is destined for delays and cost overruns. If you wish to keep your requirements meaningful, stick to the following rules of thumb:
- Describe the business need (not the technical solution)
- Keep it brief (it a single capability takes more than a couple pages then your too verbose)
- Describe everything (if there are four reports, describe each in with their own requirement)
When you avoid the pitfalls from poor requirements, your project will be constructed on a solid foundation. The chances of success are will be far greater.
Wednesday, January 09, 2008
More reading for fun
I read two books recently and they were both pretty good. The first is American Creation and the other is A Tale of Two Cities. Yes the time period is similar in both books, but that was merely a coincidence. I don't have an express interest in 18th century history.
American Creation introduced me to stories about our history that I found intriguing. I had held a belief that the founders were mostly united through a common enemy and purpose. That belief didn't make sense and the stories in American Creation highlight the difference of opinions and approaches that form the basis of our nation. Themes trumpeted by Washington (strong central government) and Jefferson (sovereignty of the states) echo in politics today.
I found A Tale of Two Cities surprisingly good. Sure, I was familiar with the opening page..."the best of times...the worst of times." I had even attempted reading it when I was younger. This time, though, the story had me riveted. Yes, you have to adjust to the flowery language of Charles Dickens, but the story is very suspenseful. Plus there is plenty of violence, intrigue, and romance.
American Creation introduced me to stories about our history that I found intriguing. I had held a belief that the founders were mostly united through a common enemy and purpose. That belief didn't make sense and the stories in American Creation highlight the difference of opinions and approaches that form the basis of our nation. Themes trumpeted by Washington (strong central government) and Jefferson (sovereignty of the states) echo in politics today.
I found A Tale of Two Cities surprisingly good. Sure, I was familiar with the opening page..."the best of times...the worst of times." I had even attempted reading it when I was younger. This time, though, the story had me riveted. Yes, you have to adjust to the flowery language of Charles Dickens, but the story is very suspenseful. Plus there is plenty of violence, intrigue, and romance.
Tuesday, January 08, 2008
What Were They Thinking?
Here's a book that you can pass on. What Were They Thinking is management dribble that either states the obvious or makes poor conclusion. I've seen the reviews on Amazon and must admit that I disagree. In fact, I think this book is dumb and was very disappointed. I picked the book up based on a magazine review. I didn't feel the anecdotal examples sited by the author truly supported his conclusions. I could easily come up with examples of my own that would refute his claims.
Friday, January 04, 2008
SDLC
Agile. Waterfall. CMM. Spiral. Test Driven. Blah, blah, blah. I believe I have researched a dozen software development methodology and have tried many of them in practice. Unfortunately I have yet to find one that works. One that combines rapid development with high quality and delivers projects within their targeted timeframes.
I suppose if it was easy, then there wouldn't be entire shelves at Barnes and Noble devoted to it. It it was easy, then everyone would deliver with great success. I'm becoming convinced that no single methodology is portable through development shops. And that successful SDLC (System Development Life Cycle) is a painful trial-and-error process that adopts aspects of several disciplines.
I've tried the standard waterfall. It generally has two problems. First, it is nearly impossible to completely define all the functions of a system prior to providing any code. And second it is very difficult to prevent scope creep.
In the first case, a business analyst has to be imaginative enough to define all aspects of the system. Then she must be able to accurately write these into requirements that are understandable by developers. I've never seen this done well. When overdone, the volumes of requirements become impossible of shift through, when underdone entire aspects of logic are left undocumented.
Waterfall project tend to be very long, running months or even years. This causes the inevitable panic when business analysts realize a pet feature is not included. The panic often results in scope creep, which in turn causes the project to run longer.
We've tried incremental methodologies, such as Agile too. Ok, you say, Agile isn't a methodology, but a class of methodologies. But does anyone really implement strict Extreme or Scrum or EVO?
Regardless, Agile methods have their built-in weakness too. For instance, how do you know when you are done? Or, as in the case with my current projects, resources get diverted into new critical projects, leaving others unfinished.
When it's all said and done, some hybrid method seems to work best. Concrete, but overlapping, phases are necessary for project management. Within each phase, iterative cycles with feedback have great benefit. Who knows, maybe I'll develop my own methodology, and then write a book (that no one will read).
I suppose if it was easy, then there wouldn't be entire shelves at Barnes and Noble devoted to it. It it was easy, then everyone would deliver with great success. I'm becoming convinced that no single methodology is portable through development shops. And that successful SDLC (System Development Life Cycle) is a painful trial-and-error process that adopts aspects of several disciplines.
I've tried the standard waterfall. It generally has two problems. First, it is nearly impossible to completely define all the functions of a system prior to providing any code. And second it is very difficult to prevent scope creep.
In the first case, a business analyst has to be imaginative enough to define all aspects of the system. Then she must be able to accurately write these into requirements that are understandable by developers. I've never seen this done well. When overdone, the volumes of requirements become impossible of shift through, when underdone entire aspects of logic are left undocumented.
Waterfall project tend to be very long, running months or even years. This causes the inevitable panic when business analysts realize a pet feature is not included. The panic often results in scope creep, which in turn causes the project to run longer.
We've tried incremental methodologies, such as Agile too. Ok, you say, Agile isn't a methodology, but a class of methodologies. But does anyone really implement strict Extreme or Scrum or EVO?
Regardless, Agile methods have their built-in weakness too. For instance, how do you know when you are done? Or, as in the case with my current projects, resources get diverted into new critical projects, leaving others unfinished.
When it's all said and done, some hybrid method seems to work best. Concrete, but overlapping, phases are necessary for project management. Within each phase, iterative cycles with feedback have great benefit. Who knows, maybe I'll develop my own methodology, and then write a book (that no one will read).
Tuesday, January 01, 2008
Headhunters
Has anyone noticed that recruiters work harder when you're hiring than when you are looking?
Monday, August 13, 2007
Just read a great book
Ok, while not exactly a summer read, I found Made to Stick is a great book. The book is a must read for anyone struggling to get their message out. The author's method is based on their academic observations which they have summarized with the acronym SUCCESs.
SUCCESs is easy enough. It stands for:
SUCCESs is easy enough. It stands for:
- Simplicity Stripping an idea to it's core, without turning it into a soundbite.
- Upexpectedness Grabbing a person's attention.
- Concreteness Making the idea understandable.
- Credibility Getting people to believe the idea.
- Emotional Getting people to care about the idea.
- Stories Getting people to act on the idea.
Whether you agree with their classifications and conclusions or not, you will find incite in their examples.
Tuesday, April 24, 2007
What happened to OOP?
When recruiting engineers I always start with a discussion on object oriented programming. I try not to completely surprise the candidate, so I always list the four topics: abstraction, encapsulation, polymorphism, and inheritance. Then I ask the candidate to define each term, and tell me how (and why) it is used in real world situations.
I have to admit that I am amazed at the percentage of developers who do not know the fundamentals of OOP. Even developers coming right out of school struggle with this conversation. This despite the fact that most of our entry level developers are coming out of Masters of Computer Science programs.
It has caused me to wonder if OOP is coming out of favor. If this is the case, then what is replacing it? Gang of four patterns? Something else?
You can say I am an old school developer. I learned to code when the style was structured programming. There was no concept of OOP when I earned my Computer Science degree. I was introduced to OOP several years later, when building my first applications for Windows. I immediately saw the maintain beauty of maintaining a single piece of reusable code, this was a logical extension of function libraries.
OOP was a natural evolution of structured programming, and yet I was amazed at the number of my colleagues that did not make the switch. And those who didn't were relegated to mainframe jobs and maintenance of legacy system. The best engineering opportunities were given to those who were evangelists of object oriented programming.
But as Internet development took off during the first dot com boom, a couple of trends started. One was the adoption of Visual Basic, and the other was design patterns from the gang of four (Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides).
In my mind, Visual Basic is and was a horrible trend in the practice of software development. The language, especially in its' early versions, encourage poor programming practices. And Microsoft's CASE style designer tools only exacerbated the problem. Departmental developers from corporations picked up the easy to learn language, and churned out applications that were impossible to maintain. Although recent versions of the Basic language implement OOP constructs, traditional VB developers generally do not use them.
Design patterns should have been an advancement in OOP development. In practical use, however, programmers often use patterns without practicing OOP themselves. Much the same way that procedural developers use Java or .Net and still fail to implement OOP.
The problem for me, as a manager and leader of engineering teams, is finding people who write code that is easy to maintain. To a degree, I equate maintainability with re-usability because code that is reused is not rewritten. And code that is reused is tested frequently. Coders that do not understand or practice disciplined OOP will fall into the copy-and-paste trap. When this happens, many versions of similar code appear throughout the source code, creating a maintenance nightmare.
The irony here is that descriptions of object oriented programming are very common. Wikipedia, for instance has an entry for OOP that a developer could review and understand in a couple of minutes. I hope too, that Computer Science programs strive to instill these basic concepts to their students. In the meantime I continue my search for solid OOP engineers who will help evolve our products.
I have to admit that I am amazed at the percentage of developers who do not know the fundamentals of OOP. Even developers coming right out of school struggle with this conversation. This despite the fact that most of our entry level developers are coming out of Masters of Computer Science programs.
It has caused me to wonder if OOP is coming out of favor. If this is the case, then what is replacing it? Gang of four patterns? Something else?
You can say I am an old school developer. I learned to code when the style was structured programming. There was no concept of OOP when I earned my Computer Science degree. I was introduced to OOP several years later, when building my first applications for Windows. I immediately saw the maintain beauty of maintaining a single piece of reusable code, this was a logical extension of function libraries.
OOP was a natural evolution of structured programming, and yet I was amazed at the number of my colleagues that did not make the switch. And those who didn't were relegated to mainframe jobs and maintenance of legacy system. The best engineering opportunities were given to those who were evangelists of object oriented programming.
But as Internet development took off during the first dot com boom, a couple of trends started. One was the adoption of Visual Basic, and the other was design patterns from the gang of four (Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides).
In my mind, Visual Basic is and was a horrible trend in the practice of software development. The language, especially in its' early versions, encourage poor programming practices. And Microsoft's CASE style designer tools only exacerbated the problem. Departmental developers from corporations picked up the easy to learn language, and churned out applications that were impossible to maintain. Although recent versions of the Basic language implement OOP constructs, traditional VB developers generally do not use them.
Design patterns should have been an advancement in OOP development. In practical use, however, programmers often use patterns without practicing OOP themselves. Much the same way that procedural developers use Java or .Net and still fail to implement OOP.
The problem for me, as a manager and leader of engineering teams, is finding people who write code that is easy to maintain. To a degree, I equate maintainability with re-usability because code that is reused is not rewritten. And code that is reused is tested frequently. Coders that do not understand or practice disciplined OOP will fall into the copy-and-paste trap. When this happens, many versions of similar code appear throughout the source code, creating a maintenance nightmare.
The irony here is that descriptions of object oriented programming are very common. Wikipedia, for instance has an entry for OOP that a developer could review and understand in a couple of minutes. I hope too, that Computer Science programs strive to instill these basic concepts to their students. In the meantime I continue my search for solid OOP engineers who will help evolve our products.
Thursday, April 12, 2007
Recruiting headaches; how not to get hired
I spend much of my time recruiting people for my technology teams. Currently we have openings for software engineers, QA Analysts, and a DBA. Thankfully I have corporate resources to post ads and review resumes. After candidates successfully navigate through HR, I do a short phone screen to gauge the candidate's ability to carry a conversation, and to match their knowledge with their experience (as it appears on paper).
I believe the best developers and testers have a strong academic knowledge of their profession. From this knowledge, good coding habits or solid testing methodology is learned. So my phone conversations always start with a discussion of fundamentals.
For software engineers, the conversation begins with a discussion of object oriented programming. Because I often catch candidate by surprise with this line of questioning, I always list the specific terms we will discuss. Abstraction, Encapsulation, Inheritance, and Polymorphism. I have been applying these concepts for nearly twenty years and expect every competent developer understands how they work in real world applications.
Of course some candidates can not describe OOP concepts. I usually give a lot of latitude on abstraction and encapsulation. These tend to be more conceptual than inheritance and polymorphism, which are implemented with specific language constructs. Imagine my surprise, though, when a candidate recently told me he did not know any of the terms.
When a candidate struggles with my OOP discussion, I try to give him some relief by asking him to define inheritance. Inheritance, after all, is fundamental to all modern programming and is easy to describe; simply define the word. But I was shocked when the candidate admitted that he did not know of inheritance.
This story should end right here, for at this point I politely ended my line of questioning and suggested that we did not have an appropriate "fit". The candidate, however, wasn't quite finished. He assured me that given proper requirements he could finish any project. Then he claimed that academic concepts weren't that important and if necessary he could easily look up the information he needed.
Of course he was wrong. A developer can not possibly build a class library or reusable object without understanding inheritance. In fact you can not write a meaningful Java, c++, or .Net application without inheriting an object. And you can not possibly know when to use an interface without understanding polymorphism. You can not implement objects without understanding encapsulation, and your objects will be a mess if you do not apply abstraction. Most of all, you can not hope to get hired into a position if downplay knowledge an interviewer deems important.
My quality assurance conversions cover testing methods in a similar manner as the OOP concepts. For QA, I have twelve types of tests that I expect a candidate to discuss. In the course of the discussion, I ask that the candidate describe how he applied each type of test in his experience.
I am guilty of acquiring my definitions of the tests from the web. I can't even remember where they came from, but we have a list of a few dozen QA terms. From this list I have flagged twelve to drill candidates. I always start by asking the candidate to describe Black Box Testing.
It was surprising when a recent candidate quoted the exact phrase "not based on any knowledge of internal design or code." Surprising because that phrase is an exact match of the definition on my sheet. I assumed this was a coincidence and continued.
But the next item was quoted exactly too. And the third, Unit Test was again quoted exactly, using the phrase "the most 'micro' scale of testing." Nobody talks like that. She could have at least used the word "smallest".
At this point I stopped her and asked what she was reading from. She denied reading the responses. I mentioned that I was reading my terms from a sheet that we had acquired long ago, and asked where she had gotten her material. I do not believe it is possible for anyone to have memorized those specific terms using such precise language. Again, she denied using reference material.
Generally speaking, I would not fault a person for using notes or reference material during a phone screen. But I expect they can show how an academic concept makes sense in real situations. I would also expect a person to acknowledge using reference material when it has become obvious to the interviewer. She had the opportunity to look resourceful, but instead looked like a cheat.
In both these cases, the candidate's resume looked great but they weren't a good fit for our team. These candidates simply didn't apply common sense to our conversation. Want to know how not to get hired? Simple, be unprepared, lie, or ridicule the interviewer's questions; it's guaranteed to keep you out of the position.
I believe the best developers and testers have a strong academic knowledge of their profession. From this knowledge, good coding habits or solid testing methodology is learned. So my phone conversations always start with a discussion of fundamentals.
For software engineers, the conversation begins with a discussion of object oriented programming. Because I often catch candidate by surprise with this line of questioning, I always list the specific terms we will discuss. Abstraction, Encapsulation, Inheritance, and Polymorphism. I have been applying these concepts for nearly twenty years and expect every competent developer understands how they work in real world applications.
Of course some candidates can not describe OOP concepts. I usually give a lot of latitude on abstraction and encapsulation. These tend to be more conceptual than inheritance and polymorphism, which are implemented with specific language constructs. Imagine my surprise, though, when a candidate recently told me he did not know any of the terms.
When a candidate struggles with my OOP discussion, I try to give him some relief by asking him to define inheritance. Inheritance, after all, is fundamental to all modern programming and is easy to describe; simply define the word. But I was shocked when the candidate admitted that he did not know of inheritance.
This story should end right here, for at this point I politely ended my line of questioning and suggested that we did not have an appropriate "fit". The candidate, however, wasn't quite finished. He assured me that given proper requirements he could finish any project. Then he claimed that academic concepts weren't that important and if necessary he could easily look up the information he needed.
Of course he was wrong. A developer can not possibly build a class library or reusable object without understanding inheritance. In fact you can not write a meaningful Java, c++, or .Net application without inheriting an object. And you can not possibly know when to use an interface without understanding polymorphism. You can not implement objects without understanding encapsulation, and your objects will be a mess if you do not apply abstraction. Most of all, you can not hope to get hired into a position if downplay knowledge an interviewer deems important.
My quality assurance conversions cover testing methods in a similar manner as the OOP concepts. For QA, I have twelve types of tests that I expect a candidate to discuss. In the course of the discussion, I ask that the candidate describe how he applied each type of test in his experience.
I am guilty of acquiring my definitions of the tests from the web. I can't even remember where they came from, but we have a list of a few dozen QA terms. From this list I have flagged twelve to drill candidates. I always start by asking the candidate to describe Black Box Testing.
It was surprising when a recent candidate quoted the exact phrase "not based on any knowledge of internal design or code." Surprising because that phrase is an exact match of the definition on my sheet. I assumed this was a coincidence and continued.
But the next item was quoted exactly too. And the third, Unit Test was again quoted exactly, using the phrase "the most 'micro' scale of testing." Nobody talks like that. She could have at least used the word "smallest".
At this point I stopped her and asked what she was reading from. She denied reading the responses. I mentioned that I was reading my terms from a sheet that we had acquired long ago, and asked where she had gotten her material. I do not believe it is possible for anyone to have memorized those specific terms using such precise language. Again, she denied using reference material.
Generally speaking, I would not fault a person for using notes or reference material during a phone screen. But I expect they can show how an academic concept makes sense in real situations. I would also expect a person to acknowledge using reference material when it has become obvious to the interviewer. She had the opportunity to look resourceful, but instead looked like a cheat.
In both these cases, the candidate's resume looked great but they weren't a good fit for our team. These candidates simply didn't apply common sense to our conversation. Want to know how not to get hired? Simple, be unprepared, lie, or ridicule the interviewer's questions; it's guaranteed to keep you out of the position.
The end of an era, say goodbye to an icon
I was shocked last week when I received my copy of InfoWorld. Printed in the corner of the cover was the announcement: "The Final Print Issue."
I have been reading InfoWorld for nearly twenty years. I remember when it was printed on large newsprint. In the early days, the paper was the premier source of information on technology. The articles, reviews, and news were relevant to the industry. I loved Robert X. Cringley when he provided insider information wrapped in his unique humor about Pammy and his Studebaker Hawk.
But the years have not been kind of the paper. The content simply has not retained the same quality and relavence it had during the 90s. Even Cringley digressed into useless gossip from readers and ranting against Microsoft. From my perspective, only Tom Yager remained insightful.
InfoWorld spins the change as evolution; a move away from the print world and strictly into the online world. I see it as evolution toward death. The move ignores the fact that people read newspapers and magazines for the convenience of the media. It's very easy to skim through a paper, absorb the headlines, and drill into interesting articles. No one will skim online content in the same manner.
Everyone knows the web is a tremendous source of information. And every provider of news, technology or otherwise, must have a web presence. The online experience, however, is very different from the offline experience. InfoWorld, for example, was delivered to me. It's the perfect push technology because once it is in my hands I always flip through it. InfoWorld also sends me email with links to their site. These are very easy to ignore, unsubscribe, or filter as junk. I generally ignore them.
I don't see InfoWorld reinventing themselves into Digg. It is still old school and its' web site doesn't put them on the Web 2.0 radar (which is getting tired anyway). In fact, their web-site feels more like CNN than Digg. As for me, it looks like I will be getting my technology news from eWeek and Wired.
Hey Spencer F. Katt, I miss Pammy and the Studebaker.
I have been reading InfoWorld for nearly twenty years. I remember when it was printed on large newsprint. In the early days, the paper was the premier source of information on technology. The articles, reviews, and news were relevant to the industry. I loved Robert X. Cringley when he provided insider information wrapped in his unique humor about Pammy and his Studebaker Hawk.
But the years have not been kind of the paper. The content simply has not retained the same quality and relavence it had during the 90s. Even Cringley digressed into useless gossip from readers and ranting against Microsoft. From my perspective, only Tom Yager remained insightful.
InfoWorld spins the change as evolution; a move away from the print world and strictly into the online world. I see it as evolution toward death. The move ignores the fact that people read newspapers and magazines for the convenience of the media. It's very easy to skim through a paper, absorb the headlines, and drill into interesting articles. No one will skim online content in the same manner.
Everyone knows the web is a tremendous source of information. And every provider of news, technology or otherwise, must have a web presence. The online experience, however, is very different from the offline experience. InfoWorld, for example, was delivered to me. It's the perfect push technology because once it is in my hands I always flip through it. InfoWorld also sends me email with links to their site. These are very easy to ignore, unsubscribe, or filter as junk. I generally ignore them.
I don't see InfoWorld reinventing themselves into Digg. It is still old school and its' web site doesn't put them on the Web 2.0 radar (which is getting tired anyway). In fact, their web-site feels more like CNN than Digg. As for me, it looks like I will be getting my technology news from eWeek and Wired.
Hey Spencer F. Katt, I miss Pammy and the Studebaker.
Tuesday, March 06, 2007
64-bit OS kicks butt!
Last month I wrote mention that our applications are facing challenges regarding scalability (see Strategies for Performance). One of the strategies mentioned was moving to a 64-bit operating system, Windows Server 2003 X64. Our observations are anecdotal, but the OS kicks ass...at least when compared to the 32 bit Windows Server 2003. Reports that were running for nearly 30 minutes are completing in less than two (minutes).
We recently rebuilt the server for a key customer onto X64. In moving them to the new OS, we made other improvements too. We upgraded their database to SQL Server 2005. We also realigned the storage, separating data and logs onto different physical drives. And changing those drives from RAID 5 to RAID 1.
All these changes will contribute to the performance improvement. We have restructured systems before, separating data from logs and changing RAID, but have only seen an incremental improvement in performance. It's a reasonable conclusion that the greatest improvement comes from x64.
We recently rebuilt the server for a key customer onto X64. In moving them to the new OS, we made other improvements too. We upgraded their database to SQL Server 2005. We also realigned the storage, separating data and logs onto different physical drives. And changing those drives from RAID 5 to RAID 1.
All these changes will contribute to the performance improvement. We have restructured systems before, separating data from logs and changing RAID, but have only seen an incremental improvement in performance. It's a reasonable conclusion that the greatest improvement comes from x64.
Searching for Code
Have you tried Krugle yet? Krugle is a search engine of open source code and technology pages. It is an indepensible tool to any developer. Need a special snippet of code for a specific task? Type in your search keywords and review the results.
Krugle searches code, tech pages, and projects. Code and projects return essentially the same thing; links to source code. Tech pages will find your search term in blogs and newsgroups.
I find the code search especially helpful. I have searched for grid computing, sorting, and EBCDIC; and have found useful code in each case. For me, the projects are most interesting, as I want a complete solution.
The site has a sweet Web 2.0 interface that includes plenty of Ajax. It also has allows sharing of notes. One point of contention though, I tagged several files with comments, but was unable to find them (my comments) later.
Google also has a code search capability too, but I believe it is inferior. In Google's case, the search results will highlight key words in source code files. True to Google form, its' code search is very spartan. Google does not have the Web 2.0 capabilities of Krugle, but it is fine for quick and dirty searches for very specific algorithm.
Kudos to Krugle. I suggest you add it to your bag of tricks.
Krugle searches code, tech pages, and projects. Code and projects return essentially the same thing; links to source code. Tech pages will find your search term in blogs and newsgroups.
I find the code search especially helpful. I have searched for grid computing, sorting, and EBCDIC; and have found useful code in each case. For me, the projects are most interesting, as I want a complete solution.
The site has a sweet Web 2.0 interface that includes plenty of Ajax. It also has allows sharing of notes. One point of contention though, I tagged several files with comments, but was unable to find them (my comments) later.
Google also has a code search capability too, but I believe it is inferior. In Google's case, the search results will highlight key words in source code files. True to Google form, its' code search is very spartan. Google does not have the Web 2.0 capabilities of Krugle, but it is fine for quick and dirty searches for very specific algorithm.
Kudos to Krugle. I suggest you add it to your bag of tricks.
Friday, March 02, 2007
Have you tried SearchMash?
Have you tried SearchMash? I like it so much that I made it my default search engine. The SearchMash features page explains how it is unique.
I like that I do not need to click in the textbox to type a new search. It's a little bit of Ajax magic, but it makes a big difference. In addition to a list of web sites, SearchMash also provides separate lists for blogs, images, and video. And you can watch video by clicking the thumbnail.
The searches are provided by Google, so you should have complete confidence in the results.
I like that I do not need to click in the textbox to type a new search. It's a little bit of Ajax magic, but it makes a big difference. In addition to a list of web sites, SearchMash also provides separate lists for blogs, images, and video. And you can watch video by clicking the thumbnail.
The searches are provided by Google, so you should have complete confidence in the results.
Need to do a little shopping?
Ok. This has absolutely nothing to do with business or software. But everyone needs to do a little shopping every now and then. Sure Valentines Day is behind us, but birthdays, anniversaries, and special occasions lurk just around the corner.
If you are like me, the "big" gifts aren't a problem. The kids, for instance, make it apparent what they want for Christmas and birthdays. My problem is the smaller gifts; items for co-workers or friends; stuff for my sister on mother's day; etc.
Anyway, here's two ideas. Kali Gift Bag and TranquiliTea. Kali has an eclectic inventory of odds and ends as reasonable prices that are perfect for little surprise gifts. You wouldn't shop for your wife at Kali, but it will be great on Secrataries Day. TranquiliTea is specifically for the tea drinker. Their inventory is unique.
Kali's is geared toward the online shopper. Their web site is pretty typical for a retailer. It's not fancy, but is easy to navigate and has pictures of the gifts. TranquiliTea is aimed at the in store experience. If suburban Detroit is not convenient then you should pick up the phone. Their service is extremely helpful and friendly.
Ok, one more confession; I don't buy a gift for my sister on Mother's Day...I wonder if Kali's Gift Bag will wrap something up for her.
If you are like me, the "big" gifts aren't a problem. The kids, for instance, make it apparent what they want for Christmas and birthdays. My problem is the smaller gifts; items for co-workers or friends; stuff for my sister on mother's day; etc.
Anyway, here's two ideas. Kali Gift Bag and TranquiliTea. Kali has an eclectic inventory of odds and ends as reasonable prices that are perfect for little surprise gifts. You wouldn't shop for your wife at Kali, but it will be great on Secrataries Day. TranquiliTea is specifically for the tea drinker. Their inventory is unique.
Kali's is geared toward the online shopper. Their web site is pretty typical for a retailer. It's not fancy, but is easy to navigate and has pictures of the gifts. TranquiliTea is aimed at the in store experience. If suburban Detroit is not convenient then you should pick up the phone. Their service is extremely helpful and friendly.
Ok, one more confession; I don't buy a gift for my sister on Mother's Day...I wonder if Kali's Gift Bag will wrap something up for her.
Wednesday, February 28, 2007
Almost Famous
Ever type your name on the Google page to see what comes up? I searched on mine today and found I am high on the list. When searching for "William McCann" I come up first on Google and Yahoo!, and third on Live (as of 2/28/2007).
When I search for "Bill McCann" I come up third on Google. Yahoo! does not find this site under "Bill McCann", but lists my LinkedIn profile second. I didn't see myself when searching Live with my nickname.
The irony here is that I have taken no steps to assure that I am found by search engines. It must be getting easier to get noticed; no need to take special steps (Doing something right). Or maybe I'm almost famous ;).
When I search for "Bill McCann" I come up third on Google. Yahoo! does not find this site under "Bill McCann", but lists my LinkedIn profile second. I didn't see myself when searching Live with my nickname.
The irony here is that I have taken no steps to assure that I am found by search engines. It must be getting easier to get noticed; no need to take special steps (Doing something right). Or maybe I'm almost famous ;).
Leadership and Self-Deception
I received the book Leadership and Self-Deception as a gift from a close friend of mine recently. The book is written as a parable much like another leadership book, The Goal given to me as a gift (but not from a friend). I have to admit, I do not like the parable format. The stories told in this way seem contrived; no wait, they don't seem contrived, they are contrived.
The book also has no author. Well, OK, no single author. Instead, credit for the book is given to the Arbinger Institute. There is no research behind the story, and no academic references other than to an obscure doctor Ignaz Semmelweis. The book felt like a white paper for a leadership consulting firm. Maybe that is Arbinger's intent, or maybe that's my self-betrayal.
That's not to say that there aren't helpful tips in the book. Like all material of this ilk, there is plenty we can apply to ourselves. In Leadership, the authors make the case that spend our time in boxes, where we rationalize our behavior and blame others. Coming out of these boxes must be like a self-actualizing experience.
I wouldn't be honest if I recommended the book. Certainly the lessons, taken with a grain of salt, could be very helpful. Myself, I will take away some of the concepts and I will be more conscious of delusions. In the end, maybe it will make me a better leader and person after all.
The book also has no author. Well, OK, no single author. Instead, credit for the book is given to the Arbinger Institute. There is no research behind the story, and no academic references other than to an obscure doctor Ignaz Semmelweis. The book felt like a white paper for a leadership consulting firm. Maybe that is Arbinger's intent, or maybe that's my self-betrayal.
That's not to say that there aren't helpful tips in the book. Like all material of this ilk, there is plenty we can apply to ourselves. In Leadership, the authors make the case that spend our time in boxes, where we rationalize our behavior and blame others. Coming out of these boxes must be like a self-actualizing experience.
I wouldn't be honest if I recommended the book. Certainly the lessons, taken with a grain of salt, could be very helpful. Myself, I will take away some of the concepts and I will be more conscious of delusions. In the end, maybe it will make me a better leader and person after all.
Subscribe to:
Posts (Atom)
You might also like ...
-
I remember almost nothing about the morning of September 11th. It was my son's first day of school, but I don't recall thinking abo...
-
Apparently Johns Hopkins research doctors have successfully removed a kidney through, um, the donor's oraffice. It's called "tr...
-
I am normally a proponent, and sometimes early adopter, of new technologies including Web Sites and Web Services. I'm also a believer in...