a collection of lengthy notes on how I am usually coward to do what is wrong and how I am sometimes brave to do what is right. Bits of management and self management, .NET programming, Clojure parenthesis and lots of design mistakes are the things one will find here.

пятница, 5 сентября 2014 г.

When
starting to learn things about the world of computer programming I was sure
that there is some piece of knowledge that I had to discover to become an
actual programmer. My perception was that there are facts, ideas and thoughts,
which were not available to me at the moment due to some reasons, but that once
I learn them, it will be the moment when a programmer is born.

In
childhood I used to think this way about all the things that people do: for
example, I could have learnt some elementary physics in school and thought that
while it looks and feels like physics, that’s certainly not something actual
scientists work with. I understood that to learn what real physicists do I
should go to a university, spend several years and then one day, somewhere around
the fourth or fifth year they will raise the curtains and show me what
is the science about and how it is totally different from what I imagined.

I don’t
know whether such mindset is a common thing for children and youngsters,
but it is certainly not a very good thing for students. My confidence that
really important knowledge will be opened to me only at some distant point in future was a serious blocker for learning. The problem here is
that when you think that the things taught to you are not
that important – at least not as vital as something else that you are supposed
to face later – you are not going to learn much. Additionally, having to study
something useless and feeling obliged to wait for important portions of knowledge leads to
frustration, at best. What’s more, the feeling that I will be taught crucial
stuff in future made me believe that the only thing that I must do is waiting,
while what a student (and as you gradually discover, everyone) has to do
is actually learning – that is trying to do things, asking questions and looking for answers
everywhere their mind can reach.

This way, it
turns out that the most valuable thing that I learnt in the university, while
trying to become a programmer, is that there is no arcane knowledge, which
someone is concealing from me. In other words, there isn’t a piece of any
particular science or profession that one has to wait to learn and that, when finally discovered,
turns the student into a professional, be it a programmer or a
physicist. Instead, there are lots of details behind each and every subject and each
of them might seem lacking significance, not important or even irrelevant at some moments.
However, the truth is that one has to study as many of these details as possible to get a feeling and to
draw some unifying concepts from the experience, which means understanding what one is
learning.

Once I have
come to appreciate this obvious idea the game has changed and it felt like lots
of doors opened, letting me learn whichever subject I found worthy. It suddenly
appeared to me that the only blocker to learning new ‘real’ stuff is the
limited time that one can devote to it – apart from that you can go anywhere and
study whatever you wish. A good finding, ain’t it?

The nasty
part is that I still sometimes have to remind myself that there is no knowledge
that someone is trying to hide from me, preventing me from being a better programmer,
advancing from a junior to a senior position and so on. As before, I sometimes
find myself thinking that one day I will learn the last piece required to be a
great programmer and will finally turn into one, although I have already got used
to telling myself that becoming a better programmer is not about studying a
certain amount of required things. I will keep facing the idea that something
is not available to me yet, but, unlike with my first years at the university, now I know that the reason is not that the knowledge is hidden, but that I didn't try the right things and didn’t ask the right questions yet. Hence, I should keep asking new ones and
looking for answers to them, because that’s the only way to learn something new.
What’s even more important, this process of searching for answers and bringing
them to the world is what delivers me the experience and being a professional
is more about the experience than anything else.

This said, eager to become a great software developer, instead of waiting for someone
to teach me a magic trick or two I will better sketch some design diagrams and put
together a bit of code – that seems to be the only reasonable way to achieve my
goals.

About

I work as a team-lead at Acumatica, the Cloud ERP. Besides, I hack code on my own for the sake of learning, fun and whatever else that programming can bring. To reflect on these activities and structure my thoughts and ideas better I also maintain a little blog.