[super jessi];

I dream in code.

I’m Not a Vampire, Just a Natural-Born Coder

I’ve always loved night-time. I feel smarter at night. For some reason, society has always tried to make me feel bad for that. I’ve been told so many times to just train myself to wake up at 6am, like that’s the only way to be successful, to wake up at the buttcrack of dawn. No matter what I tried, I could never really stick to that, my natural body clock would take over and I’d be burning the midnight oil.

Even in my old career, I showed up at the office at 1pm. No one really liked it, but they weren’t there at midnight with me either. There’s a beauty to working during times when others are not. There’s so many distractions that it’s like a constant fight to get something accomplished during the day. I actually think my schedule was pretty perfect; half the day is spent with people, with the final hours free from their distractions, and the day ends on a productive high-note.

Come to find out, I was just born to be a programmer.

Multitasking: I Think We’re Only Fooling Ourselves

There’s so much hype around multitasking, as if it’s such a great thing. There seems to be this idea that if you’re only doing one thing at a time, you’re a slacker and you could be doing more. Is it even really possible to do more than one thing at once, and actually do them well? I think it depends on what you’re trying to do. The mind can probably handle one active thing at a time, but has room for some passive things as well. People can totally eat potato chips and watch tv. Walk and chew gum, maybe. But I’m not sure it’s possible to really focus your mind on two things at once. I think we’re only fooling ourselves into thinking we’re getting more done, when all we’re really doing is stressing ourselves out.

Are You Multitasking or Are You Suffering from Digital-Device-Distraction Syndrome? Can I collect disability for this?

Test your own ability to multitask, and see how you stack up against others…

Work Comfortable

Where did dress codes come from? Who was the genius who thought it was necessary for people to wear suits to work? It’s actually so much smarter and more logical to dress comfortably when working. I know I can’t sit still for very long when I’m all zipped up in fancy clothes. Gimme some Uggs and a cozy sweater, and I’ll curl up in my chair and not leave till my brain shuts down.

Here’s some more reasons that dress codes suck.

To-Do or To-Don’t

I’ve always been haunted by the fact that I can’t keep a good to-do list. There’s been days when I’ve felt list-y, and I’d throw together a list, motivated to keep my life in order. But, inevitably, I look at it less and less, and forget to add anything to it…it just becomes a list of things I never got done.

See, I could never figure out the rules for making a to-do list. Do I have to put ‘brush my teeth’ on the list? It’s something I have to do, but I seem to get it done every day. What about appointments? Do they go on the calendar AND the list? It’s all just too overwhelming! And it’s way too easy to ignore the list when it’s overwhelming.

Who actually wants to look at a list of all the boring chore-items they have to get done, day after day, after day? Where is the time for fun stuff, or even just the stuff you actually want to do? Does that have to go on the list too? And really, won’t I remember to vacuum when the floor is gross enough to remind me itself?

Don’t get me wrong, I like to be productive, and I’m a huge fan of feeling like I accomplished something at the end of the day. I’d just rather spend my time accomplishing that something than writing a list about it.

Finally, a kindred spirit! Don’t let lists rule your life. They may not work for everyone. And even then, they may not work for every area of your life. I love lists for project management-type stuff…to help me remember bugs to fix in my apps, features to add, views to adjust. Do what works for you.

New Blog

Switching my blog from Wordpress to Octopress.

How to Recognize a Good Programmer

How do you recognize good programmers if you’re a business guy?

It’s not as easy as it sounds. CV experience is only of limited use here, because great programmers don’t always have the “official” experience to demonstrate that they’re great. In fact, a lot of that CV experience can be misleading. Yet there are a number of subtle cues that you can get, even from the CV, to figure out whether someone’s a great programmer.

I consider myself to be a pretty good programmer. At the same time, I’ve spent a fair amount of time on the business side of the fence, filtering technical CVs for projects, interviewing people, etc. Thanks to this, I think I have a bit of experience in recognizing good programmers, and I want to share it in this article, in the hope that it may help other “business guys” to recognize good programmers. And, who knows, perhaps some programmers who have the potential to be good but haven’t really exploited this can also read this and realize what they need to do to become good (although, as I’ll argue, that’s definitely not accessible to all programmers!).

In his article The 18 mistakes that kill startups, Paul Graham makes the following point:

“… what killed most of the startups in the e-commerce business back in the 90s, it was bad programmers. A lot of those companies were started by business guys who thought the way startups worked was that you had some clever idea and then hired programmers to implement it. That’s actually much harder than it sounds—almost impossibly hard in fact—because business guys can’t tell which are the good programmers. They don’t even get a shot at the best ones, because no one really good wants a job implementing the vision of a business guy.

In practice what happens is that the business guys choose people they think are good programmers (it says here on his resume that he’s a Microsoft Certified Developer) but who aren’t. Then they’re mystified to find that their startup lumbers along like a World War II bomber while their competitors scream past like jet fighters. This kind of startup is in the same position as a big company, but without the advantages.

So how do you pick good programmers if you’re not a programmer? I don’t think there’s an answer. I was about to say you’d have to find a good programmer to help you hire people. But if you can’t recognize good programmers, how would you even do that?”

I disagree with Mr Graham on this one. I think there are a number of very strong indicators of a “good programmer” (and, conversely, strong indicators of a “not-so-good programmer”) that even a business guy can recognize. I’ll summarize some key indicators and counter-indicators in a list at the end of the article.

#1 : Passion

In my corporate experience, I met a kind of technical guy I’d never met before: the career programmer. This is a person who’s doing IT because they think it’s a good career. They don’t do any programming in their spare time. They’re shocked when they find out I have a LAN and 3 computers at home. They just do it at work. They don’t learn new stuff unless sent on a training program (or motivated by the need to get a job that requires that technology). They do “programming” as a day job. They don’t really want to talk about it outside of work. When they do, they talk with a distinctive lack of enthusiasm. Basically, they lack passion.

I believe that good developers are always passionate about programming. Good developers would do some programming even if they weren’t being paid for it. Good programmers will have a tendency to talk your ear off about some technical detail of what they’re working on (but while clearly believing, sincerely, that what they’re talking about is really worth talking about). Some people might see that as maladapted social skills (which it is), but if you want to recognize a good developer, this passion for what they’re doing at the expense of social smoothness is a very strong indicator. Can you get this guy to excitedly chat up a technology that he’s using, for a whole half hour, without losing steam? Then you might be onto a winner.

#2 : Self-teaching and love of learning

Programming is the ultimate moving target. Not a year goes by without some new technology robbing an old, established standard blind and changing half the development universe. This is not to say that all good programmers pick up these changes and ride the bleeding edge. However, there’s a class of programmers that will never, ever pick up a new technology unless forced to, because they don’t like learning new stuff. These programmers will typically have learnt programming at university, and expect to get by on whatever skills they picked up there, plus whatever courses their company is willing to send them on.

If you’re thinking of hiring someone as a programmer, and he ever utters the words “I can work with that, just send me on a training course for a week and I’ll be good at it”, don’t hire that guy. A good programmer doesn’t need a training course to learn a new technology. In fact, the great programmer will be the one talking your ear off about a new technology that you haven’t even heard of, explaining to you why you must use it in your business, even if none of your staff knows how to use it. Even if it’s a technology he doesn’t know how to use yet.

#3 : Intelligence

Some business people assume that lack of social tact and lack of intelligence are the same. Actually, intelligence has several facets, and emotional/social intelligence is only one of them. Good programmers aren’t dumb. Ever. In fact, good programmers are usually amongst the smartest people you know. Many of them will actually have pretty good social skills too. The cliché of the programmer who’s incapable of having a conversation is just that - a cliché. I’ve been to a few meetings of the London Ruby User Group and I can say that with only a very few exceptions, most people there are smart, talkative, sociable, have varied interests, etc. You wouldn’t look at them chattering away in the pub and think “what a bunch of geeks!” - at least until you approach a group and realize they’re talking about the best way to design a RESTful application with a heavy UI front-end.

This doesn’t mean that they’ll all feel comfortable in every social context. But it does mean that if the context is comfortable and non-threatening enough, you’ll be able to have as great a conversation with them as you would with the most “socially enabled” people (perhaps better, since most good programmers I know like their conversation to revolve around actually useful topics, rather than just inane banter).

Don’t ever hire a dumb person thinking they’re a good developer. They’re not. If you can’t have a great conversation with them in a relaxed social context, they’re very likely not a good programmer. On the other hand, anyone who’s clearly very smart at the very least has a strong potential to be a good or great programmer.

#4 : Hidden experience

This is correlated with the “Passion” point, but it is such a strong indicator that I’d like to emphasize it with its own point.

I started programming when I was about 9, on a Commodore 64. I then migrated onto the PC, did some Pascal. When I was 14 I wrote a raycasting engine in C and Assembler, spent a large amount of time playing with cool graphic effects that you could get your computer to do by messing directly with the video card. This was what I call my “cocoon stage”. When I entered that stage, I was a mediocre programmer, and lacked the confidence to do anything really complicated. When I finished it, I had gained that confidence. I knew that I could code pretty much anything so long as I put my mind to it.

Has that ever appeared on my CV? Nope.

I strongly believe that most good programmers will have a hidden iceberg or two like this that doesn’t appear on their CV or profile. Something they think isn’t really relevant, because it’s not “proper experience”, but which actually represents an awesome accomplishment. A good question to ask a potential “good programmer” in an interview would be “can you tell me about a personal project - even or especially one that’s completely irrelevant - that you did in your spare time, and that’s not on your CV?” If they can’t (unless their CV is 20 pages long), they’re probably not a good programmer. Even a programmer with an exhaustive CV will have some significant projects that are missing from there.

#5 : Variety of technologies

This one’s pretty simple. Because of the love of learning and toying with new technologies that comes with the package of being a “good programmer”, it’s inevitable that any “good programmer” over the age of 22 will be fluent in a dozen different technologies. They can’t help it. Learning a new technology is one of the most fun things a programmer with any passion can do. So they’ll do it all the time, and accumulate a portfolio of things they’ve “played around with”. They may not be experts at all of them, but all decent programmers will be fluent in a large inventory of unrelated technologies.

That “unrelated” bit is the subtle twist. Every half-decent java programmer will be able to list a set of technologies like “Java, J2EE, Ant, XML, SQL, Hibernate, Spring, Struts, EJB, Shell scripting”, etc.. But those are all part of the same technology stack, all directly related to each other. This is possibly hard to recognize for non-programmers, but it is possible to tell whether their technology stack is varied by talking to them about it, and asking them how the different technologies they know relate to each other. Over-specialization in a single technology stack is an indicator of a not-so-good programmer.

Finally, if some of those technologies are at the bleeding edge, that’s a good positive indicator. For instance, today (November 2007), knowledge of Merb, Flex, RSpec, HAML, UJS, and many others… Please note that these are fairly closely related technologies, so in a couple of years, someone who knows all these will be equivalent to someone familiar with the Java stack listed in the previous paragraph.

Update: As a clarification to this point, there’s in fact two indicators here: variety and bleeding edge. Those are separate indicators. A good variety of technologies across a period of time is a positive indicator, whether or not the technologies are bleeding edge. And bleeding edge technologies are a positive indicator, whether or not there’s a variety of them.

#6 : Formal qualifications

This is more a of non-indicator than a counter-indicator. The key point to outline here is that formal qualifications don’t mean squat when you’re trying to recognize a good programmer. Many good programmers will have a degree in Computer Science. Many won’t. Certifications, like MCSE or SCJP or the like, don’t mean anything either. These are designed to be accessible and desirable to all. The only thing they indicate is a certain level of knowledge of a technology. They’re safeguards that allow technology recruitment people in large corporations to know “ok, this guy knows java, he’s got a certification to prove it” without having to interview them.

If you’re hiring for a small business, or you need really smart developers for a crack team that will implement agile development in your enterprise, you should disregard most formal qualifications as noise. They really don’t tell you very much about whether the programmer is good. Similarly, disregard age. Some programmers are awesome at 18. Others are awesome at 40. You can’t base your decisions about programmer quality on age (though you might decide to hire people around a certain age to have a better fit in the company; please do note that age discrimination is illegal in most countries!).

As a final note to this, in my experience most average or poor programmers start programming at university, for their Computer Science course. Most good programmers started programming long before, and the degree was just a natural continuation of their hobby. If your potential programmer didn’t do any programming before university, and all his experience starts when she got her first job, she’s probably not a good programmer.

Disclaimer

None of the indicators above or below are sure-fire indicators. You will find great programmers who break some of those moulds. However, my view is, you’ll rarely find a great programmer that breaks all of them. Similarly, you may find poor programmers that meet (or appear to meet) some of these criteria. But I do strongly believe that the more of these criteria a programmer meets, the more likely they are to be one of those elusive “good programmers” that, as a business guy, you need to partner with.

The criteria in bullets

So, in summary, here are some indicators and counter-indicators that should help you recognize a good programmer.

Positive indicators:

  • Passionate about technology
  • Programs as a hobby
  • Will talk your ear off on a technical subject if encouraged
  • Significant (and often numerous) personal side-projects over the years
  • Learns new technologies on his/her own
  • Opinionated about which technologies are better for various usages
  • Very uncomfortable about the idea of working with a technology he doesn’t believe to be “right”
  • Clearly smart, can have great conversations on a variety of topics
  • Started programming long before university/work
  • Has some hidden “icebergs”, large personal projects under the CV radar
  • Knowledge of a large variety of unrelated technologies (may not be on CV)

Negative indicators:

  • Programming is a day job
  • Don’t really want to “talk shop”, even when encouraged to
  • Learns new technologies in company-sponsored courses
  • Happy to work with whatever technology you’ve picked, “all technologies are good”
  • Doesn’t seem too smart
  • Started programming at university
  • All programming experience is on the CV
  • Focused mainly on one or two technology stacks (e.g. everything to do with developing a java application), with no experience outside of it

Daniel Tenner is a full-time entrepreneur and rails+flex hacker, as well as a blogger.

Link to original article: How to Recognise a Good Programmer

How to Hire a Designer or Developer

Hiring designers or developers can be one of the most difficult things for non-technical business people to do. In many cases, it may be necessary, of course, to hire someone to create your website, build custom systems, or design your sales collateral – all the more necessary if you aren’t a designer or developers yourself. But how can small business owners hire someone that’s right for the job if they don’t really understand what goes into that job in the first place?

How can you do your due diligence even when you don’t completely grasp the type of thing you might be hiring someone to do?

Here are four tips that will help you hire a designer or developer and make sure you’re getting what you paid for:

1. Seek Recommendations

Any search for developers or designers should start with your peers. Ask your friends and colleagues for recommendations of people they have worked with in the past. Do you like the website of the hardware store down the street from your restaurant? Find out who made it and how much it cost. Did you overhear a business owner at the last Chamber of Commerce meet-up mention their new, custom-made order database? Ask them who made it and if their experience with the developer was positive.

Even if you’re hiring someone full-time, rather than a freelancer, you can still seek recommendations from your peers and from the job candidate’s peers. Niche communities like Working With Rails (a community for Ruby on Rails developers) and LinkedIn allow members to endorse one another. While other sites, such as Dribbble (a community for graphic designers), can give you a sense of how others in the industry view the person you’re considering hiring for a job.

Also, don’t be hesitant to ask for recommendations from the designer or developer directly. “Don’t be afraid to ask for references from a developers’ or designers’ previous clients,” said freelance web developer Richard Session. “I was asked this recently by a new client and I think the information they received about me helped put me over the top in winning the contract.”

2. Ask Lots of Questions

Asking questions is important for any hiring process, of course, but it’s especially important when you’re hiring for a position or project you don’t quite understand on a technical level.

When hiring a freelance developer or designer, be sure to inquire about each candidate’s process. When will you receive deliverables? When will payments be due? How will rights be assigned? Knowing how a freelancer works beforehand and avoiding miscommunication will save time and headache in the long run.

You also want to make sure you understand what tools the person you’re hiring uses and what formats your project will be delivered in. If your designer sends you AI files when your printer requires EPS, you’ll need to know up front if the designer you’ve chosen can deliver what you need in the specifications you require. There’s also a huge difference, for example, between a site built on a common backend like WordPress and a custom solution created by the developer, said Session. While the latter might offer more flexibility, the former will be easier for a future developer to work with and modify.

Be specific in talking about what you want, and don’t be afraid to ask your job candidate to clarify or explain things you don’t understand. If he can’t explain to you what he’s talking about in a way that satisfies you, that might be an indication that you need to hire someone else.

When hiring someone for a full-time position, web developer Daniel Tenner, the CTO and co-founder of Woobius, has a good list of the types of things you should look for. (Though Tenner’s article focuses on hiring developers, it applies generally to designers as well.) The chief characteristic you should look for in a new hire is passion. You want to hire someone that’s passionate about design or development, gets excited about new technologies or techniques, and does this stuff in his spare time.

3. Learn the Basics

You’re hiring an expert for a reason, but it’s still important to learn the basics. Knowing the difference between PHP and Ruby (they’re both backend web programming languages), or knowing when to use CSS and when to use tables (the former is for front end code on websites and the latter is for displaying tabular data) will go a long way toward helping you hire the right person for the job.

You might never be able to debate the merits of various JavaScript frameworks with your potential hires, and that’s okay. But you should be able to understand what they’re talking about when they tell you they plan to use JavaScript to animate transitions between images in a slideshow on your site – you should be able to decide if that’s something you even want.

There are plenty of places around the Internet where you can learn a little bit about web development or graphic and web design. If you’re hiring a designer, for example, you might want to take a look at some beginner Photoshop tutorials. Armed with knowledge of the basics, you’ll be better equipped to interview a prospective hire (and your BS detectors will function at a higher and more accurate level).

4. Get Help from Friends

Even with a firm grasp of the basic concepts behind web design and development, it can be next to impossible for a non-technical small business owner to evaluate code or compare quotes from competing applicants. That’s why it can be extremely helpful to have a friend or colleague that can act as a mentor and help you pick out quality applicants.

“Get a mentor/advisor in the applicable field if you’re at all unsure of what you’re looking for,” said Kyle Bragger, founder of web design and developer community site Forrst. According to Bragger, non-technical business owners can “benefit from having someone in your corner, so to speak, who’s able to help you through the ever-so-important process of finding tech and design [employees].”

Of course, not everyone has access to someone who knows enough about web design or development to sufficiently evaluate a project quote or job application. If you don’t have a friend or colleague in your corner that’s able or willing to lend a hand, one way to meet such a person is to attend tech meet-ups in your local area. You may even find someone you’d like to hire for a job at such a gathering and skip the middleman altogether!

Josh Catone is the Features Editor at Mashable. Before joining Mashable in May 2009, Josh was the Lead Writer at ReadWriteWeb, the Lead Blogger at SitePoint, and the Community Evangelist at DandyID. He’s written about technology since 1998 for magazines, newspapers, and web sites, and he is the co-founder of Rails Forum, the web’s largest community for Ruby on Rails developers.

Link to original article: How to Hire a Designer or Developer