Despite the fact that I have always been obsessed with computers and programming, I have always been a novice at it. I only ever learned to program the simple programs you could copy out of magazines. The programming language I know best is 6502 assembly, but I started learning it 6 months ago. The next language I am most proficient in is Python. My level of skill is finishing the Code Academy guided learning tutorials.
The subject area I am most proficient in is philosophy. I am equally good at metaphysics and political philosophy. Philosophy is not like programming at all. At least the philosophy I have been trained in. It is possible to use mathematics, statistics, and computers to do philosophy, but that kind of research is closer to the sciences than the humanities. The type of philosophy I know best is a subject area of the humanities. This kind of philosophy is very discursive and involves reading lots of words and learning a lot of qualitative information. Everything you do in the humanities is about writing essays and linking discursive concepts together into a logical argument. The word "argument" exists in programming, but it has a very different meaning. In programming, an "argument" is a value that is passed between functions, programs or subroutines. In philosophy, an argument is a collection of reasons to support a claim. If the reasons are good enough, you are entitled to "prove" your claim.
The process of making arguments (the main activity in philosophy) is very different to programming. Programming is a mechanical process, where you have to build up your entire program or game out of discrete interlocking parts. The whole program is the entire sum of the parts that go into making it up. In philosophy, the whole is more than the sum of the parts. Even though you can have a "big picture" aim in programming, the "big picture" of a philosophy book, article, or thesis is qualitatively different, and in some ways independent of the reasoning you undertake to make up its "overall message".
How to Start From the Absolute Beginning
It's Okay to Do Unfamiliar Things
Anyway, despite programming and philosophy sometimes being different, there is nothing stopping you from learning both skills. I want to put forward a theory about how it is possible to go about learning programming for the Atari 2600 if you're a humanities student (like me). The first step you take in learning something new is dedicating time and effort to starting. Through every phase of coming to master a subject area you will have to put effort in. I suppose the point I am trying to make here is that at the very beginning of learning to program for the Atari you're going to have to get used to doing something familiar. For example I've had to improve my mental maths. I frequently found myself going to google or a calculator in order to do simple arithmetic, because I had forgotten a lot of my mental maths since I had done calculus in high school. But now I'm getting better. It was an unpleasant feeling, looking at two two-digit numbers and feeling helpless to add them together. But I got there. I pushed myself, and I forced myself to keep working despite the fact I was unfamiliar with this kind of activity.
Accept Your Current Skill
I feel like a lot of people who go about starting off in philosophy give up when they first fail at writing a good essay. A lot of people say "I will never succeed at this goal I have to be a good XYZ". This is only true if you never try. However if you put even a minimal amount of effort in every day, say, a hour's practice at something every day, it is completely false that you will never master a specific skill. The only thing that is stopping you from achieving some specific goal -- say learning how to argue for a specific premise in an argument, or learnign how Indirect Indexed addressing works for the 6502 -- is the frustration you are feeling with the lack of a habit you have at completing that task. The whole point of learning is to form habits, and when you first start out learning something, you don't have that habit. You are frustrated when you first start off learning something because you expect to have a habit that is ready-to-hand in order to help you succeed at completing that task.
The best strategy to diminish the level of frustration you have at learning something new is to try and accept that you don't yet have a habit for solving that task.
So in a way, the mythology that asserts that if you spend ten thousand (10 000) hours practicing a skill, you will perfect it, is half-true. You do need to keep practicing an activity for a long time in order to become good at it.
The mythology is in reality completely misleading and very false. This is because not just any practice will lead to you mastering a subject area. You need the correct kinds of habit-forming practice in order to eventually becoming an expert at something.
This article (https://www.daedtech.com/how-developers-stop-learning-rise-of-the-expert-beginner/), by Erik Dietrich, demonstrates what happens if you learn the wrong kinds of habits when you first go about learning how to do something new. The article says you will definitely become an expert if you learn the right habits. It adopts a model from Dreyfus and Dreyfus to show what stages you go through if you learn all the right habits for a subject area:
- Advanced Beginner;
- Proficient; and
But Dietrich says things can go wrong. If you learn bad habits learn your new subject area, you risk becoming derailed from this pathway to becoming an expert. You may advance beyond being a Novice and Advanced Beginner with bad habits in a subject area, but you will never become Competent.
Being an Expert Beginner
You will become an Expert Beginner instead. Dietrich helps describe what the bad state of being an Expert Beginner is:
The Expert Beginner does not know what they do not know. They don't understand the bigger picture of the subject area they are learning. The point Dietrich is trying to make here is you will only ever learn the correct habits to finally becoming competent if you understand the bigger picture of the discipline you are becoming initiated into.
Dietrich illustrates this argument by relaying a story about how they once used to enjoy bowling. Dietrich says when they started off as a novice at bowling, they adopted a very bad method of throwing the ball down the lane. Such a method was very bad for eventually becoming an expert and bowling, but it was adequate in order to progress right up to being an Advanced Beginner. Eventually Dietrich's bowling game hit 160, and he could never seem to improve beyond that point. So he asked for help. A mentor said he would have to completely unlearn the terrible habit he had at throwing the ball in order to eventually become competent. This meant that he would immediately become much worse at bowling before he ever become better. The frustration Dietrich went through unlearning his bad habits was so irritating he gave up bowling.
From Humanities to Programming
Dietrich did not understand the overall point of bowling, so he was happy to at first adopt some terrible habits about playing the game. I think the exact same lessons applies to people like me who have originally been trained in the humanities, and are trying to learn programming as a new skill.
Don't immediately assume that just because you have mastered a couple of interesting tricks for the Atari 2600 that you have mastered everything you need to know about programming for the system. You will never truly understand how to become an expert at the Atari unless you are humble and pay attention to the advice of others. Learning the Atari is not an individual but a collective process. Make sure you socialise with the community adequately and pay attention to the work other people are doing.
Having a box of tricks that you have memorised to deploy at certain instances is not an adequate mastery of the system.
Maybe I am being too demanding, but I think a very deep understanding of a subject area is the only way anyone can go about becoming an expert at something.