If you are a programmer or a computer scientist, you have probably been asked a gazillion times by a friend (or a friend's friend) to teach them or guide them into the programming world. And yet, very few of those friends actually succeed in that. Why is that? We are about to see that.
And if you are a programmer who just started learning, use this as a motivation to keep going.
I will use this blog post to send it to those people who ask me exactly that.
"Hey Matija. Could you teach me programming? I want to make games and make millions." - Friend
"Sure thing." - I would say.
"But before that, read this blog post and come back to me."
"Do you still want to start programming?"
For new programmers
First and obvious thing about programming. It's abstract. You cannot make any relation with the real world.
You can expect to ask these questions when starting:
Wait, what is this thing called a variable? Function? Like a function in mathematics?
For loop? Whaaaaat?
Do I need math to write programs?
Objects? What?! Like a chair? How do I code a chair? Why would I code a chair?
How do I make games?
Callback function? Call who back?
What is this black window when I run the program? How do I create Facebook?
This is boring? It's nothing like I imagined it to be? I want to see the results!
I want to see results now!!
Everything is hard when you first encounter it. And it's supposed to be hard. And it is going to be hard! All the time! The trick is think of it as a challenge. Just like athletes do. They challenge themselves all the time to prove to themselves that they are capable of such a things.
You are goin to hit a wall all the time. Don't make it a reason to quit.
Setting goals too high!
That's another problem I encounter on a regular basis.
Like I mentioned, people try to build games, a new Facebook, Instagram, Twitter or some other service and they percieve as doable in an afternoon or so
Facebook? Yea. I need to code this wall, add a feature to make friends and boom. All done.
It's all so obvious. How hard can that be?
Easy peasy, lemon squizy.
They start, all hyped up with their visions of grandeur and create their
main file. Then the majestic train of thoughts become a bit less...eh..grandoise?
Okay. Now what?
After some Googling...
Database? Mysql? Postgress? MongoDb? What do I do?
Objects, relations, API,...whaaat?
Tabs vs spaces
And then they lose their motivation. Most of the time, this is where they quit.
Don't set your goals "too" high. Set them high, but not too high ;). Don't expect to able write a Twitter in one afternoon, especially if you've just started.
Expecting results too soon!
For the first few months of programming you won't create anything relevant. That's the truth. You will probably create things like multiplication table and draw some patterns like:
***o*** **ooo** *ooooo* ooooooo *ooooo* **ooo** ***o***
and that's great. That will teach you to think like a programmer. You will notice some patterns that you did't notice before. And that skill is crucial for a programmer to be good.
Don't skip those kind of tasks, because if you think those are easy and stupid, you are so wrong.
Try to do them :). Prove to yourself that you can do it and actually do it!
Results will come with time. Programming is not something that can be mastered in two weeks. But then again, Rome wasn't built in a day!
Do I need math to do programming?
Yes and no! But mostly no. It's good to know math, but it's not necessity. If you know addition, subtraction, multiplication and division you are good to go.
Otherwise, try to refresh your memory on those things ;).
What programming language to choose?
It doesn't matter. The main thing is to start with something. The truth is that some languages are easier to master than others, but in the beginning, it doesn't really matter.
Once you master those "easy" tasks like multiplication table, drawing some patters, parsing user input, then language will become a bit more important depending what you want to achieve.
But when you are starting, language is not important. Even if you want to create Android applications or games, you are free to start with Python. It doesn't matter that you cannot use Python to create Android applications. The more important thing is to start with something. Remember, don't set your goals too high ;).
And don't worry about a programming language.
Hardest thing to master is to think like a programmer.
I would suggest you to start with Python since it easy to use.
Who will teach me all of that?
You will! Programming is not like e.g. history, where you need to memorize bunch of years and events that happened.
Programming requires you to think! Other programmers can help you, but in the end it's all you. You will use previous experiences to solve the problems. And that's what problem solving (usually) is:
Using what you know to solve the problem.
By doing that, you will learn new thing which you can be used to solve other problems.
And that requires time and dedication.
What programming is not!
What programming is!
And also this:
And finally this:
For programmers helping new programmers
Arm yourself with patience. Don't use too detailed explanations. New programmers don't care and should not care about pointers, pass by reference/value,.... Show them the way. Don't solve everything for them, yet steer them in the right direction.
Now when you have little better picture about programming, don't be scared of it. It's nothing to be afraid of. Now you know what to expect when starting.
Also published on Medium.