For me myself, I think it’s impossible to know almost everything in this so called software industry. Often, I have to learn new things, for example last year: I have to learn PCI, smartcard, EMV, Linux drivers, ISO7816 all at the same time in short time. I spent almost 3 months to cover all those subjects and finally started to write the codes.
Recently, I had to learn biometrics API to be used with fingerprint authentication from a vendor/manufacturer of fingerprint device. This device was expected to work on WinCE and also Linux, but for the Linux version they only provided the documentation and the binary. Only sample code on how to initialize the library and set/get some parameters from inside the library.
A few years ago, I started to write my first assembly code on Intel8051. I created a DC motor controller aimed to synchronize two or more DC motors at certain speed. I learned everything related to DC motors and controller in general. This project was not successful and after a few months it was dropped. Not because of the technical difficulties but my own time to continue the project.
Then, I went to a company doing Linux solution for telecommunication; auto attendance, PBX, signaling, smsc, etc. I have written some scripts utilizing the VLS library to feed a video to be transferred to 3G network. It was very hard project, because technically only I worked on the project. This was also unsuccessful because the company seemed to think that I can handle everything from technical to business side. O my goodness, I chosen to resign.
Then I moved to a retail company starting their research development. I did a lot of code porting to make Google Android to run on my board. That was two years ago. I did all the things myself, because again, wrong management. This project was stopped because of business difficulties, at that time even G1 has not been released yet.
Then I moved to another company, doing Linux development on embedded system. We worked for France based company and also French and US clients. This was the best company I have ever joined until few months before my leave. That time was the most extensive coding for me and my colleague, we successfully delivered exceptional jobs, until some time we got the so-called global crisis. We lost money, we have to close down and we had to move on.
After almost 2 years prior my graduation working as freelance coder, and 5 years in a professional field, I found myself a little bit lost. Almost all of what I got so far, not significantly lifted me up to somewhere with coolness. Because I have spent too much time to learn almost everything.
Once I wrote in my CV: I worked on Intel 8051 assembly, electronics, RS232, RS485, FPGA, VHDL, Asterisk PBX, VLS/VLC, Darwin Streaming Server, Google Android, Linux Kernel, RTOS, RT-AI, Cake PHP, Smarty, Dreamweaver, Adobe Photoshop, 3Ds Max, MPEG4IP, SAP, Oracle builder, PHP+MySQL, PostGre, MS Access, MS Visual Basic, Borland Delphi, Borland C++, Ogre, SDL …. the list went on.
I did not write bullshit, I have done that so many “expertise” in that so many “field”. All with a very few codes, and to be honest no more than 3 months on most of the subjects. When someone asked me about for example RT-AI, I will probably not be able to answer as well as other question regarding MPEG4IP.
Then I made a decision, I have to change me myself from such paradigm. I loudly spoken to myself: I cannot bite more than I could chew. That’s it, I started to recover everything from the beginning and only collect things that interested me the most, then leave all behind. I have chosen very few subjects but in consequence I spent more time to get deeper understanding.
Sometimes, I want to start to open a new thing that is HOT, techie, but then I come back and say: I cannot bite more than I could chew.
This link is really a quintessential for me, hope it also good for you: http://norvig.com/21-days.html
For more advance implementation of such concept, the concept on which now I am relying on, we could take an example of Linux project. In this very big project we knew something called MAINTAINER, a representation of a cell that do something specific with people who has the expertise in it. There is no crypto developers work on GPIO framework bug fixes, for instance.
Last note: We don’t have to be another person, what could the world be if everyone takes the very same subject of expertise?