Feel like a geek and get yourself Ema Personal Wiki for Android and Windows

28 April 2010

Joel on Software - a summary: 2006

This is a summary for the blog by Joel Spolsky, Joel on Software, volume 2006. The summary for the years 2000-2010 can be found on the Joel on Software summary index page.

If you start a software company, 1. be clear about what problem you are solving, 2. find a partner, 3. don't expect much at first, be patient. -- Micro-ISV: From Vision to Reality.

If code is to be successful, it needs an organization that takes the code and turns it into products. Your first priority as manager of a software team is building a "development abstraction layer". This layer makes that the only thing programmers have to care about is coding. -- The Development Abstraction Layer.

Using AJAX is a huge advantage over traditional full page request / response methods, because it makes the user feel being in control. -- FogBugz 4½ and Subjective Well-Being

Non-programmers will never be good at running software companies because they can't tell the bunglers from the real programmers. -- My First BillG Review.

Programming languages with first-class functions let you find more opportunities for abstraction, which means your code is smaller, tighter, more reusable, and more scalable. -- Can Your Programming Language Do This?.

Three management models
The Command and Control Management Method is best summarized as "do it or I'll shoot you". Programmers don't like this. And in a software company you can't just tell everybody exactly what to do because it would simply be too much and the manager is often the person with the least information.

Econ 101 management assumes that everyone is motivated by money. One big problem is that it replaces intrinsic motivation (the natural desire to do things well) with extrinsic motivation (getting paid if you things well), which reduces the desire to do a good job. Another problem is that people will be trying to game the system instead of doing things well. Econ 101 is abdication of management: management simply doesn’t know how to teach people to do better work, so they force everybody in the system to come up with their own way of doing, which they can't because that is a management job.

The Identity Management Method is making people identify with the goals you’re trying to achieve, which creates intrinsic motivation. Be open about your own goals and don't have a hidden agenda.

How do you decide between C#, Java, PHP, and Python? The only real difference is which one you know better. -- Language Wars.

Guerrilla Guide to Hiring

To get great programmers: 1. go to conferences and events and talk to the people there, don't post on a general purpose job board. 2.get great kids a year or two before they graduate (internships) 3. build a community to recruit from. 4. Employee referrals is one of the weakest sources of new hires. -- Finding Great Developers.

Programmers are more likely to take the job that offers them a nice private office with an Aeron chair and good hardware. Treat developers as the experts, regardless of politics. Programmers will be happy if they work on a cool project with cool technologies. Managing your corporate brand is just as important for recruiting as it is for marketing. -- A Field Guide to Developers.

Criteria for sorting resumes (!= hiring). 1. Applicant is passionate about computers and loves programming 2. It has a cover letter customized for this particular application. 3. The applicant can communicate. 4. Is smart. 5. Has experience with difficult technologies. 6. Adds diversity to the team. 7. Don't look for experience with particular technologies if you're not looking for a guru in a particular technology. -- Sorting Resumes.

Type declarations are one of those accidental difficulties that good programming languages can eliminate. -- Book Review: Beyond Java.

A phone interview can save a lot of time when hiring. Smart people can generally tell if they're talking to other smart people by having a conversation with them on a difficult or highly technical subject. -- The Phone Screen.

Agile is not supposed to be about swapping out one set of bureaucratic, rigid procedures for another equally rigid set of procedures that still doesn't take customer's needs into account. -- From the "you call this agile?" department.

We need to rethink the misconceived notion that lots of choices make people happy. Each additional choice makes complete sense until you find yourself explaining to your uncle that he has to choose between 15 different ways to turn off a laptop. -- Choices = headaches.

Lego programming does not exist and never will. -- Blog post 2006/12/05.

"Simple Sells" is a myth. -- Blog post 2006/12/09

Poeple most often don’t really care about software itself. The more they notice it, the more annoyed they’re going to be. Elegant software gets out of the way and only presents choices to support the task they are trying to accomplish. -- Elegance.

Whatever. -- Explaining Steve Gillmor 23 Dec.

Gifts from vendors to bloggers are ethically indistinguishable from bribery and reduce the credibility of all blogs. -- Bribing Bloggers.

23 April 2010

Joel on Software - a summary: 2005

This is a summary for the blog by Joel Spolsky, Joel on Software, volume 2005. The summary for the years 2000-2010 can be found on the Joel on Software summary index page.

If you love to program computers, count your blessings: you are in a very fortunate minority of people who can make a great living doing work they love.
1. Learn to write. The programmers with the most power and influence are the ones who can write and speak in English clearly, convincingly, and comfortably. 2. Learn the underlying concepts of modern languages. 3. Learn micro-economics. A programmer who understands the fundamentals of business is going to be a more valuable programmer to a business. 4. Do the boring classes too. 5. Computer science != programming. Take the programming-intensive classes. 6. Don't worry about India: really good programmers do have jobs. 7. Don't waste your talent on regular summer jobs, get a good summer internship. -- Advice for Computer Science College Students.

Great products are great because they’re deeply debugged and as a result reliable, keeping the customers in. Restaurants, software, it’s all the same. -- Foreword to Painless Project Management.

On FogBugz
The articles in this block can be summerized as follows: "FogBugz has a lot of great features. Buy it". That said, I can extract off-topic bits from the articles which look nice to me (which I'm doing anyway).

Listen to your customers, not your competitors. -- The Road to FogBugz 4.0: Part I

Terse and to-the-point mail may seem rude. Being more verbose leaves a polite impression. -- The Road to FogBugz 4.0: Part II

Hungarian notation may not be that bad after all. -- The Road to FogBugz 4.0: Part III

Success of a software product depends only 2% on good coding. The other 98% is customer service, debugging, marketing, demoing and testing. -- The Road to FogBugz 4.0: Part IV

Good coding conventions can make bad code obvious. Hungarian notation was very useful until the dark side took over. Exceptions are the new Goto. They make code less maintainable by breaking the possibility to have the information all in the same place. -- Making Wrong Code Look Wrong.

The software development world desperately needs better writing, i.e. more entertaining and less boring. -- Introduction to Best Software Writing I.

If you try to skimp on programmers, you'll make crappy software, and the software won't sell. Mediocre programmers never produce something as good as what the great programmers can produce. -- Hitting the High Notes.

With a day of usability testing and handful of subjects, you can find where the program's behavior diverges from the user's expected behavior. -- Usability Testing with Morae

If you want to get things done and make fast progress, you have to understand what is the most important thing to get done right now. -- Set Your Priorities.

Microsoft consistently underestimates the value of pervasive, free form, instantaneous search. -- Blog post 2005/10/14.

The term Web 2.0 is not a real concept. It has no meaning. It's a big, vague, nebulous cloud of pure architectural nothingness. -- Blog post 2005/10/21.

Many people who are excellent developers are lousy managers. And: someone who created and ran a profitable lemonade stand is most likely a better manager than someone who has taken two years of finance courses at Harvard. -- Fog Creek Software Management Training Program

Good programmers live in a shoebox in the middle of the road know pointers and recursion. The ability to understand them is directly correlated with the ability to be a great programmer. -- The Perils of JavaSchools

18 April 2010

Joel on Software - a summary: 2004

This is a summary for the blog by Joel Spolsky, Joel on Software, volume 2004. The summary for the years 2000-2010 can be found on the Joel on Software summary index page.

The number one best way to get someone to look at your resume closely: come across as a human being, not a list of jobs and programming languages. -- Getting Your Résumé Read.

.NET should have had a linker that could enable software vendors to ship executables without dependencies. -- Please Sir May I Have a Linker?

Be careful with you beta testers. Don't pick too few, don't overload them, and reward feedback. -- Top Twelve Tips for Running a Beta Test

RDBMS access is intrinsic to modern application implementation and should be supported in programming languages in a first-class way syntactically. -- Blog post 25/03/2004

Perfectionism is a very dangerous quality in business and in life, because by being perfectionist about one thing you are, by definition, neglecting another. -- Blog post 22/04/2004

Nobody thinks they know how to remove a burst appendix, or rebuild a car engine, unless they actually know how to do it, but for some reason there are all these people floating around who think they know everything there is to know about software development. -- Mike Gunderloy's Coder to Developer.

Microsoft has decided to break the compatibility of many API's when shipping a new version. There's no return on investment for application developers to convert their applications to a new API. Microsoft alienates developers from the Windows platform and forces them into web development. -- How Microsoft Lost the API War.

When you're writing software that mediates between people, you have to get the social interface right. -- It's Not Just Usability

It is hard to come up with a price that maximizes profit for a piece of software. Product price segmentation can have significant negative implications for the long term image of your product. And people don't even know themselves what they are willing to pay. -- Camels and Rubber Duckies

13 April 2010

Joel on Software - a summary: 2003

This is a summary for the blog by Joel Spolsky, Joel on Software, volume 2003. The summary for the years 2000-2010 can be found on the Joel on Software summary index page.

Local optimizations can harm your business as a whole. -- Blog post on 2003/01/15

The Apple strategy is not to talk about future versions of their products. Advantages: 1) you will be guaranteed at least half a year without competition. 2) Avoid disappointed expectations. 3) flexibility that you need later when Murphy strikes. 4) It is a simple policy. -- Mouth Wide Shut.

An attractive community site is easy to understand and work with, and discourages fuss. Small software implementation details result in big differences in the way the community develops, behaves, and feels. -- Building Communities with Software

VCs do not have goals that are aligned with the goals of the company founders. Company founders would prefer reasonable success with high probability, while VCs are looking for fantastic hit-it-out-of-the-ballpark success with low probability. -- Fixing Venture Capital.

The way to stand out when applying for a job is to write a letter that reflects your unique personality and highlights the reasons why you want to work at the place to which you are applying. -- Blog post 2003/06/15.

No software company can succeed unless there is a programmer at the helm. -- Rick Chapman is In Search of Stupidity.

Unicode maps characters to codes. The encoding defines the way the sequence of codes that represent characters are stored. You have to know what encoding a string is to display it correctly. -- The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)

The most important factor in software work is not the tools and techniques used by the programmers, but rather the quality of the programmers themselves. -- random qoute from Blog post 2003/11/14

When software is built by a true craftsman, more effort went into getting rare cases exactly right than getting the main code working, even if it took an extra 500% effort to handle 1% of the cases. This delights users and provides longstanding competitive advantage. -- Craftsmanship.

Unix culture values code which is useful to other programmers, while Windows culture values code which is useful to non-programmers. -- Biculturalism

09 April 2010

i18n-proof c# regex recognizing uppercase and lowercase letters

Finding WikiWords with patterns like [A-Z][a-z][...] won't do: the recognition of uppercase and lowercase letters is not i18n-proof.
The following Regex finds WikiWords in an i18n-proof way:
private static Regex _wikiWords = new Regex(@"
    \b       #start on a word bounday
    \p{Lu}   #start with uppercase letter
    \p{Ll}*  #zero or more lowercase letters 
    \p{Lu}   #one uppercase letter 
    \w*      #and zero or more arbitrary characters 
    |                 #or
    \p{L}+\d\w*       #a mix of letters and digits
    |                 #or
    \d+\p{L}\w*       #a mix of digits and letters
", RegexOptions.IgnorePatternWhitespace);
Speaking of i18n. The term i18n is flawed. I am from the Netherlands. If i want to support my own language, and no other language, no international boundary is crossed. But I still need a i18n-proof WikiWord engine.

07 April 2010

Joel on Software - a summary: 2002.

This is a summary for the blog by Joel Spolsky, Joel on Software, volume 2002. The summary for the years 2000-2010 can be found on the Joel on Software summary index page.

Maybe this is the key to productivity: just getting started. Move forward every day. You may accomplish only small changes, but sooner or later you will win. -- Fire And Motion

When you're showing off, the only thing that matters is the screen shot. Build your (demo) UI in such a way that unfinished parts look unfinished. -- The Iceberg Secret, Revealed

Three minutes of design work can save hours of coding because Nothing is as Simple as it Seems

If you have a small number of customers, prefer frequent small releases to minimize time between user request and releasing the code. If you have (or want) a large number of paying customers, prefer less frequent releases to avoid a bad impression. For Systems With Millions of Customers and Millions of Integration Points, Prefer Rare Releases, mainly because of compatibility issues. -- Picking a Ship Date

Pick a programming language pragmatically, suitable for the job. Don't base your choice on syntax. -- Blog post 2002/05/05

There are different "worlds" of software. When somebody tells you about methodology, think about how it applies to the work you're doing. -- Five Worlds

Smart companies try to commoditize their products' complements to increase the price of their products. -- Strategy Letter V

The success of a platform is directly proportional to its ability to attract developers. -- Platforms.

Entering a bugreport in your bugtracking software should be as easy as possible, otherwise people will avoid using it. -- Blog post 2002/09/12

A good installer will roll back all changes when it fails. -- Blog post 2002/10/08.

Never listen to your customers. They were dumb enough to buy your products, so they have no credibility. -- oops, that was a Dogbert quote.

Leaky abstractions are abstractions where the underlying concept sometimes leaks through. The only way to deal with the resulting problems is to learn about the underlying concept. So the abstractions save us time working, but they don't save us time learning. -- The Law of Leaky Abstractions.

There are a lot of programming worlds, each of which requires a tremendous amount of knowledge for real proficiency. If you have a choice of platforms, use the one your team has the most skills with, even if it's not the trendiest or nominally the most productive. -- Lord Palmerston on Programming.