Cal Henderson (of Flickr [1] fame) gave a keynote "Why I hate Django" [2] at DjangoCon 2008, which is well worth a watch for many reasons. In one bit he asked how many of the audience were working on blogging engines. So many people put their hands up in fact that of those that didn't he asked "Why aren't you?"
Anecdote aside, I see so many questions and answers here that relate to building blogging engines I just have to ask, since I don't get it: why are so many people writing what surely must've been written countless times already? If you are writing one such engine, why are you? Because I seriously don't get it.
Nobody told you? Writing a blog engine is the new Hello World.
Honestly? I think it's probably some combination of the following:
I'm definitely one of those developers, though. I admit it! And I'm a bad case, too, because I keep writing them over and over and over again, probably because I'd rather be coding than blogging. But the biggest reason, for me, is that the services out there really do suck (IMO), and it's hard to sit back and just accept that without imagining ways it could be done better. That's usually how it gets started.
I wrote a bit about this [1] last year actually, after quitting TypePad (it just wouldn't do what I wanted -- i.e., 2, above) and rewriting the site I'm actually, right now, in the process of rewriting yet again, for probably the fifth or sixth time over the past seven or eight years, doubtlessly for the last time:
I could never shake the nagging irritation I felt when I couldn't get TypePad to do something I wanted, however trivial. Why, again, couldn't I search my own freaking blog? To find an old entry, I had use either the next/previous links (lame), category links (assuming I'd bothered to categorize the entry I was looking for) or even worse, the proverbial "archive" links, organized descendingly as they are by date, hoping I might get lucky and choose the right month-year combo during which I'd happened to submit the entry in question. And why couldn't I just create a new, non-blog-oriented page containing some other kind of managed content, like my reading list, or a collection of movie reviews? Sure, I could succumb to the rigid structure of the TypePad system and simply "tag" all movie reviews as "movie-review" and dump them into the blog alongside everything else -- but why should I have to do that? I was an engineer, for God's sake -- I'd done this before. A blog was just CRUD -- a web app in its simplest form. Why hadn't anyone gotten one right, after nearly a decade of requirements gathering?
Screw it, I thought. I'm going to do this myself. Again.
Everyone's reasons are different, but most folks probably do it because they can. Spolsky said something about this a while back, in a podcast I think, or an interview -- something about how the first thing every Web developer wants to do is build an image-upload service.* Why? It's what they know. And it's something they'd use themselves, if it were done the way they believe it should be done.
To be fair, though, a good commercial blogging service? That's a hard problem. If it weren't, it really would've been done by now, and it hasn't. Not perfectly. Anyone can build a CRUD app for himself, select *, sort by date, done deal. Building a good, full-featured personal-expression engine, though, intended to serve hundreds of thousands or millions of users? Done right, that's a much more complicated undertaking than one might think.
* See? Told ya [2].
[1] http://chris.enunciato.org/entry.aspx?id=459I don't know about blogging engines, but I've written other pieces of "worthless" software. Namely IM clients and compilers.
Why did I build those? Partly because I'm addicted to programing. Mainly though because when I find a technology that I use constantly, I quickly become obsessed with it and start to get seriously annoyed by its flaws.
Eventually, the same thought will occur: "You know, I could do this better..."
Normally, especially with compilers, I realize that no, one person alone probably can't build an overall better product. But there are one or two great features that I could build on top of an otherwise mediocre product. And programming is fun, so why not build a product you can use for your daily tasks.
I very much liken it to guys I grew up with who were really into cars. They constantly worked on and rebuilt portions of their cars. You could easily argue "why bother, everyone is building a car". But for them it was fun to drive around a piece of equipment they worked on. Programming a blog engine isn't much different.
Unless of course, you don't blog :)
We've been guilted into feeling like every developer should be writing a blog. The fact is that most of us are more comfortable writing a blog engine than actually writing a blog.
One thing I find frustrating about the developer profession is how seldom I can say "Look what I built!" to the common person and they can grasp the concept and say "Wow that's pretty cool!" I can write a multi-threaded socket server class which I can use in almost any project but no one, other than a fellow developer, and perhaps only network developers will find it all that interesting.
Blogs, chat clients, chat bots etc all seem to be the kind of programming projects developers write to show off to their non-technical friends.
If you saw the security flaws most blog engines have had, you'd write your own too.
I rolled my own blogging engine once, for a few reasons:
Because it's about the easiest thing to create that has practical value, and can form the basis for one's design approach, conventions, structures, and etceteras. It becomes part of one's toolkit. Same thing carpenters do: build themselves a toolchest.
Dogs do not write software, they bark and eat bones.
Why did I write my own blogging engine:
Was it worth it? Indeed! Is it the prettiest blog around? Certainly not.
I wrote a blog engine last fall. It was a fun exercise, I learned a lot in the process.
I then immediately stopped using it and switched back to Wordpress.
Well go and thank Ruby on Rails. Ever since the blog screencast came out, nobody want to do the Petshop engine [1] anymore . :-)
[1] http://www.microsoft.com/downloads/details.aspx?FamilyId=E2930625-3C7A-49DC-8655-A8205813D6DB&displaylang=en#QuickInfoContainerQ .Why does every man and his dog want to code a blogging engine?
Well firstly it's not every man (where every man = all human males on Earth), because in order to code a blogging engine they would have to be able to code first, hence we can reduce the set down to:
Every Human Programmer is Male.
Secondly not all Male Humans owns a pet dog, thus we can safely assume:
[All Male Humans] > [Male Humans who program] > [Male Humans who program who own a pet dog]
But it has never been demonstracted that a dog can program (Dolphins have rudementary logic solving abilites but dogs generally have a far lower IQ then Dolphins.)
Thus the set is further reduced (where dog that can code = 0) to:
All Male Programmers.
But we can narrow this down even further:
Not all Male programmers are alive, so only living ones should be included. But not all living programmers will have the ability to code a blogging engine so it becomes:
All Living Male Programmers That have the capability to Code a Blogging engine Excluding their pet dogs.
Because we are programmers, it's what we do.
Darknight
For the same reason we all used to write our own mail client.
I wasn't sure of the reason then, either.
I did it because there wasn't anything out there that I liked and meet all my needs. I am picky I guess. Since I wrote my own blog/wiki, I can tailor it exactly to my needs - have all the features I want, and none of the features I don't.
Why are there
1) so many programming languages?
2) so many web development frameworks for a single language.
3) so many books on a single topic
4) so many newspapers in a single locality
5) so many telecom service providers.
and so on....
May because of one or more of one's
1) need not being satisfied with the existing services.
2) urge for control
3) urge for education
4) aspiration for recognition
5) economic ambitions
Whatever the reason public gets to benefit. They get a new product. If they like it they can accept it or else ignore it.
I am also trying to code one in Perl. Not because we already doesn't have any. We got blosxom, MT, bricolage etc. But my aims are control, education and the a little bit of selfish need of recognition.
I started writing one once because I wanted my blog to be ALL mine, all the way to the core. I'm willing to bet that there are a lot of others who feel the same way. Personally, after a while I wised up and realized that I would be better off putting my efforts toward my other projects.
I'm also willing to bet that so many people are working on blogging systems because it's so popular. So perhaps a lot of people are setting out to make the next WordPress.
About a year ago, I was seriously considering writing my own blog engine. Why?
I do freelance software development and so I've gotten a bit into the general freelancing world. Pretty much all the blogs on freelancing focus on either web design or writing. After giving it a bit of thought as to why this might be, it became apparent that, for writers and web designers, the blog itself is a demonstration of their skills - either the writing in the posts or the design of the site.
Once I reached that point, it was obvious to me that, if I wanted to use a blog as a way to draw in business, it would be most effective if I wrote the blog engine myself, as it would then serve as a similar demonstration of my skills.
I never actually did much towards writing it, though, partly because I started messing around with WordPress and Drupal (which taught me that I generally don't have enough to say to keep a blog going) and partly because a client came along and set me off down another well-trodden path: Writing a site which is, at its heart, a Twitter front-end.
I think for some people it's like a rite of passage. One of my professors told me once that you can't call yourself a programmer until you can preform certain things. Let me see if I can remember:
I think some people are obsessed with that kind of stuff. Maybe there are similar ones for web programmers?
I haven't started mine yet, but I intend to soon.
Why? I've done a few static HTML pages, but nothing that can be called web programming. I need a harmless project to get my feet wet. I would have done it sooner, but it's only recently that I realized I have enough blog topics to make a good start.
Edit: I've given this a little more thought since the question first appeared. What is the reason for starting a blog? It's a form of self expression. What's the most natural form of self expression for a programmer? Why, a program, of course! The blog and the blogging software go together like peanut butter and jelly.
I am building mine to learn Django, with all these frameworks and whatnot, and considering I've used a lot of scripting languages for web development, it really is the new Hello World.
I never intend on releasing it.
The subject is about blogging engines, but it looks like some people don't make a difference between a blogging engine and a custom (personal) framework.
I think this is mainly to show your skills to the world, but also a way to prove to yourself that you have skills. It's a concept everybody knows, so you don't need to define what you're going to make, and you can make a very simple one within a few hours, or make a complex one spreading the development time over several months.
So far, every PHP developer I know started making his own blog, and so I did. It's a way to define your first skills.
These mostly end up in the trash or will be covered with dust.
I called this a framework although it may not be very expanded.I planned to make one, it's more like a way to work faster once you made it.
On every website I made, the same structure comes back, and there's a lot of repetitive code. (think about making forms, validating input data, initialization scripts, etc..)
You made it so you know how it works, you can easily edit and/or expand it, in short it's yours and it's here to help you.
Short answer: users are creatures of habit, and don't like new systems if they feel the old one worked fine. When a user base becomes accustomed to a particular customized system, its very hard to transition to an "off the shelf" system. Every difference will feel like a bug.
My group of friends has a community blog that a couple of us started. It began life years ago as a couple Perl scripts, then was re-written with PHP. I wanted to rewrite it using spring MVC, but I found that the Pebble blogging system looked pretty solid. So, I asked myself the same question you did: why should I write a new blogging system when there are plenty of good ones already. I optimistically wrote a data migration tool to move all the old blog data into Pebble format, and deployed the new system. Everyone hated it and stopped posting.
I don't think Pebble is a bad blogging engine - to the contrary. I think any system that didn't work exactly like the old one would have received the same reception. I currently have plans to write a new blog engine that will work exactly like the old one. That way I can add new features to a solid code base, and avoid pissing off my users.
For frameworks, I'm currently considering Spring MVC, which I have good experience with, and Scala+Lift, which looks pretty cool. After all, I should get something out of this too, right?
... eating your own dog food, (no pun intended ;-)
If you think of a blog as a mini content management system, it makes sense. It's almost a boilerplate code that can be build out as needed.
Personally for a couple of reasons:
All in all, this is a personal thing for myself and I am now using it while gradually improving it.
Because you understand the domain - what you want the program to do - and because you want to do it better than some existing program (scratch your own itch as ESR puts it).
Fifteen years ago it was newsreaders where apparently it was so bad so a "DON'T DO THIS" document was written: http://www.newsreaders.com/misc/twpierce/news/newsreader-manifesto.html -
But it is an interesting excercise if you remember to throw away the result :) Having done one yourself will enable you to understand better the problems in the one you end up using.
Rolling Your Own Blog Engine [1].
[1] http://haacked.com/archive/2006/10/06/Rolling_Your_Own_Blog_Engine.aspxI think it’s one of those products that you can validly do a thousand different ways. “Blogging” isn’t a specific enough problem to have one clear solution, it’s a fairly loose term for publishing stuff on the web. People still write word processors, because Word isn’t the last word, so to speak.
See also: to-do apps.
My reason: stupidity. I didn't learn to customize TextPattern enough to suit my needs, so I wrote one from scratch. Not in use anymore. Sometimes to learn a complicated and advanced template-based CMS or almost-CMS is indeed harder than to write 100-500 lines of code to do a simple fetch-text-from-db-and-dump-it-on-page.
Because I need a lightweight, fast and modern solution. I don't want a bloated blogging engine with countless "I'll never use those" features, with backwards compatibility to php4 or some other ancient technology, with weird html output, procedural (or pseudo-oop) code, with bugs well known to whole community but me (because I don't lurk in given blogs engine forum or mailing list). That's why :)