not just random

October 2, 2006

knowledge-based development

Filed under: Uncategorized — Alex @ 10:49 pm

Here are some examples of desirable things to be learned during formal education:

  • Fundamental principles.
  • Abstraction.
  • Critical Thinking.
  • The ability to find answers elsewhere - knowing where and how to look.

I have often heard people say that it is really not all that important to know the details of a certain issue, as long as one knows where exactly to find the correct information.

I agree with this - to a certain degree.

I enjoy learning new things, actually like to spend much of my spare time doing so. I would like to caution against taking shortcuts though. Yeah, there is a time for quick, easy answers, but there is also a time when actual understanding is crucial. Truly understanding (as much as that is possible) what you are doing will most certainly make you more confident and effective.

Here are some knowledge areas for software developers:

  1. Theoretic foundation of computer science
  2. Software development theory and practices
  3. Specific software implementations

Yes, this is simplified. Also note that these are areas of knowledge and the last point (specific software implementations) is here seen as another such area (e.g. editors, compilers, linkers, copy, etc. tools) and not necessarily the goal that follows from applying software development theory and practices to theoretic fundamentals of computer science.

A fourth, slightly more separate, but nonetheless very important knowledge area: Application domain knowledge. This is important and improving that area is definitely worthwhile.

Knowledge and understanding (and determined, continued improvement in each of the given those areas) are important. Decisions should be based on that knowledge, more on fact and reason, less on belief and opinions. Of course, increased, objective knowledge will likely lead to more educated opinions.

How often do you know exactly what your code is doing, including all its side effects? Can you look at variables and easily follow them along, always being able to tell their values, given a specific, initial value assignment? Do you know, if you are using your development tools as effectively as you could?

How well do you understand the tools you are using and your current approach (and its alternatives) to software development on top of fundamental CS principles? Should you improve your weaknesses or focus on your strengths?