When you read news and tutorials about a technologie, it always seems easy to accomplish a hello world program. If not, that technologie doesn’t worth the try. Each technologie brings its own incredible features that will make you save a lot of times. Sometimes, by providing some good EDI features, sometimes the technologie came with some rich controls inside the box, sometimes the technologie will allow you to target a lot of platform with few efforts.
Starting from scratch
Being used to develop most of my application in C#, I like to start my projects from scratch without any dependencies : the empty type of project. From my experiences, having some library dependencies will make you dream with all the time saved. With dreams came nightmares. The library can be unusable : not compatible anymore, the library can have bugs or it can stop being updated, or even worst : the library isn’t free anymore. Libraries can sometimes walk all over each other : they may not work together. Sometimes several libraries will have the same features : it means you may have embedded duplicate code.
Reinvent the wheel
Here is a list of what I tend to reinvent :
– basic functionality (parser, helper, converters etc.)
– user interface control
– project template and architecture
Which are the benefits to reinvent the wheel in such case :
– understand what is under the hood
– improve your ergonomic and designer skills
– learn how to manage different size project
– find some good ways to separate concerns with layer project to reduce dependencies
– discover/set up some good patterns
Which are the benefits to NOT reinvent the wheel in such case :
– save a lot of time so you can focus on other things
– learn how to work and integrate external library
– less code means less test, less code to maintain : less is more
– discover new frameworks
That’s why I always look what is shipped with a technology before starting working with it. I recommend you to try to reinvent the wheel for something that matter for you. As an example, I always loved our phone’s desktop with Widgets, shortcuts etc. That’s the reason why I’ve chosen to develop my own widget controller (the desktop where you can drag and drop widgets) and some widgets. It was a very good experiences because it leads me to think how to make my widget controller usable by another developer. How to separate the code to make developer able to create a widget that can be used ? Asking yourself those questions is a thing. It’s another one to make your best to answer those questions yourself.