I started to program aged 4 with Logo. I then learned Batch and BASIC at about 10, and built basic games and IRC bots. During my software engineering cursus, I followed several pure computer science courses, did programming and sysadmin works during internship and student jobs, and started some personal projects. Once graduated as a software engineer, I started a PhD in AI and taught several topics: Object-Oriented Programming, C++, Java, and AI techniques.
My PhD in the pocket, I started to work as a freelance software and infrastructure engineer. One year ago, I've really started to learn the web technologies. Tomorrow will be another opportunity to learn and practice something new. I've still a long way before me.
What I miss
In my opinion, software development implies a lot of different skills and knowledge, and a good aptitude to learn new ones. It cannot be summarized to a bunch of keywords, as the ones we put on our resume. It's more than that: my software development capabilities is the sum of all the skills I've learned and practiced among different projects and cases.
Beyond recruitment and job seeking, I'm interested in that information in order to follow my progress and my learning, but also to know what I miss in my profile to participate to a given project, or simply compare me with others or profile patterns. It's all about my personal development.
It's also about communication. If I don't have a clear structure to organize my skills with a hierarchical semantic, I can't expect that a non programmer (e.g. Human Resource Manager, Project Manager, your wife) could really understand what it's involving in my job. I'm sure that some very experienced managers have developed some kind of implicit feeling and understanding of the job, but it's not enough. We can only expect considerations of what we do only if we clearly explain it, and not with a bunch of unrelated keywords.
For those reasons, I would like to keep an eye on the skills I have developed and effectively used. I really miss that tracking. Because a skill is only proved with its effective usage on a real project, I would also like to track the projects I've participated, and which kind of domain business they were about. It's my portfolio like the one of a photograph or a cabinet maker: without realizations, you're not a developer, whatever long is your skill set.
Where to start?
To start somewhere, I could certainly detail some parts, list the libraries I master and the ones I've just used once, and describe the projects in which I was involved. But it's a tedious work you generally do only when you're updating your resume. At that moment, even if you manage to remember a lot of details - and I'll personally forget several ones - putting them all on your resume as it will prove any real capability, except that you can throw a bunch of buzzwords in a document. Personally, I'm trying to organize my skills in different categories. But I'm not happy with that process and format for several reasons such as:
- it's tedious, I've got the feeling I'm wasting my time;
- even if a resume needs all the details, I would like to have them to follow my progression;
- a standard taxonomy of skills is missing
I'm very concerned by the last one. I think a proper taxonomy would be the first step for a better learning, but also a better communication of what software development consists in (and not reducing it to a bunch of non related keywords).
The unknown taxonomy
There are very different possible ways to structure the skills and knowledge of software development, depending on the point of view. The ACM Computing Classification System is a subject classification system for computer science, interesting but not adequate to software development. The Wikipedia portal 'computer programming' is a better start, but it doesn't include for instance specific libraries or deals with knowledge that are not related to development skills such as the Wikipedia category of 'computer programmers'. The Skills Framework for the Information Age is a model to describe the the skills of ICT professionals. It's certainly a better start point, but it's too wide since it tries to address any profession in ICT including business and management ones. As a consequence, its granularity is not enough for my purpose. Building this kind of taxonomy is not an easy task, especially because there are so many concepts to consider.
The programming languages could be organized by paradigm (e.g. procedural, object oriented, functional), but also by kind of typing (e.g. weak, strong, static, dynamic) or semantics (e.g. static, dynamic). The libraries can be organized by programming languages, but also by tackled domain (e.g. security, network). There are also other languages such as markup languages (e.g. HTML, XML). If you consider database, you have to consider different types (e.g. graph, unstructured, object, relational), languages (e.g SQL, XQuery), and DBMSes (e.g. PostgreSQL, Neo4J). We cannot forget the kind of development methodology you can follow (e.g. waterfall, agile), some specific development topics (e.g. embedded system, concurrent programming, distributed programming, AI techniques). or the development tools (e.g. RCS, test and integration, profiling, issue tracking).
It's not something I can just list. I need a real taxonomy to organize those skills.
So, I need to build this taxonomy. In fact, we're already building it with Sybil. But we don't want a taxonomy that is only the result of our point of view. We have already started to discuss it with several developers (friends, ex-colleagues, and of course the companies where Sybil is in beta). We would like more, we would like your opinions (here or on Hacker News dicussion):
- what will be the perfect taxonomy for you?
- which categories do you expect?
- Software Development is an Apprenticeship (bencoe.tumblr.com)
- Skills Management #4: CSC Belgium case (8thcolor.com)
- What's Your Geek Number? My Points System To Rate Software Engineers (javacodegeeks.com)
- This is why learning Rails is hard (readysetrails.com)
- Marketing yourself as a programmer (codeofhonor.com)