How Do I Improve in Software?
Tags: learning, tutorial, beginners, programming
Published: 2020-11-12 18:58:11

"How Do I Get Started With The Software?" It has always been very difficult for me to answer this question. But as time went on, I think I came up with a logical answer I could give. How to start gaining a skill? How to develop this skill? 

Usually people who ask me this question are divided into two.

The first group thinks that I will offer them a book or a video and when they follow this suggestion, they will learn the software.
The second group thinks that skills and knowledge are the same.

Of course, these two mentalities are wrong. But what I really want to touch on here is the fact that knowledge and skill are not the same. 

Please have a little more patience. Because to build a solid building, its foundation must be very durable and clean. The first thing we need to understand is this. For example, in the software branch, when we talk about starting or developing, we are talking about learning at the most basic level, not software. We're actually talking about learning. It is important to understand that the concept we should focus on is learning. Because when we understand this, we can actually adjust some approaches and expectations better in the light of what we already know and experience in learning. Now we will talk about a group of abstract concepts and construct a metaphor/analogy to make our work easier.

## Phenomenon
Knowledge is the fact that a reality in the outside world takes on a certain meaning in our heads. "Two plus two make four" is a phenomenon that exists in the universe. When we understand this phenomenon, it is stored in our minds. And we can call this storage is information.

There are significant relationships between phenomena in the universe. For example, there is a relationship between "four minus two makes two" and "two plus two makes four". These relationships between phenomenons can have an infinite variety of meanings.

“Cause-effect”, “Whole-piece”, “Previous-next”, “equality”, “equivalence”, “similarity”, “contrast”, “big-small” are just a few examples from this infinite set of meanings.When we consider the phenomena of the universe, large and small, and these relationships between them, we can actually think that the universe is an abstract and concrete geography of phenomena. Here we start building the metaphor.

## Problems
So what does the problem mean? The problem is a couple of points given to us in this geography of phenomena. Points A and B. When we say "Start from point A here, reach point B" on geography, we define a problem. For example, remember proofs or inferences in mathematics. The derivation of the formula cos(a + b). In this example, there are cosine and sinus phenomena at point A. At point B, there is the phenomenon of the expansion of cos(a + b). These two points are actually indirectly linked by another set of trigonometric, arithmetic, and geometric phenomena. So solving the problem here means finding a path by starting from point A, following the phenomena and relations connecting points A and B, and walking down that path and reaching point B.

What affects the difficulty of the problem in this metaphor? Geography can be harsh or it can be a flat plain. A and B can be close or far apart. There may be obstacles on the path between A and B that are difficult to overcome. Perhaps it is a very difficult rock climbing, or perhaps it is necessary to pass an underwater cave.

We talked about the phenomenon and problems. Now let's talk about information and add it to our metaphor.

## Information
If we can work in a very small region of this geography and construct the facts and relationships that reveal it in our minds, we will have "knowledge". In other words, knowledge is the "map" of a small region of the phenomenal geography in our minds.

Comparing phenomena to geography and information to a map is a simplified metaphor, and you will see that it will be a useful tool thanks to the simplification it brings.

I want to attract attention again. Knowledge is not just a fact list in our head. It includes understanding the relationships between facts. When mapping a region, we don't just list landforms or buildings in the area. If we do not use their relations with each other, the map will not come out. The mountain is north of the lake. There is a forest on the slopes of the mountain. The stream flowing through the forest feeds the lake. These are examples of the relationships that make up the map.

Thank you for your patience up to this point. We analyzed the relationships between fact, problem and information and placed it in our metaphor. 

We are now ready to discuss the concept of skill and why it is not the same as knowledge.

## Skill
We said that information is a map. The skill is to actually go to that geography with that map, start from point A, aim at point B, find your way and reach B to solve a given problem. So skill is problem solving using knowledge.

Look, pay close attention to this point.

To "have an effect" in the real world, to create a change that has permanence and meaning only happens when we personally walk from one point to another in the geography of the phenomenon.

We have just listed what affects the difficulty of the problem in this metaphor. Let's continue with a related question. What affects whether we can solve a problem or not?

Of course, first of all, the difficulty of the problem (ie the difficult geography, the distance of B to A, the obstacles in between, etc.). But there are also many factors that interest us. For example, we may or may not have a map of geography. We may or may not be good at using maps. We may or may not physically have the health or vehicles and equipment to make this journey. We may be alone, there may be people with us who do not know any other way, or there may be other guides who have dominated the geography and who have gone through the paths that are very similar to this.

Here, some of the things that make problem solving easy or difficult are from the field (i.e., the geography of facts), some from the problem definition (i.e., the position of A and B relative to each other), some of our information sources (whether we have a map), some of our abilities (our ability to use maps, our health, our tools) and part of it comes from who we travel with.

That's why skill is different from knowledge. Finding and traveling is different from having a map.

We can now return to our main question and look for an answer.

## Getting Started with the Software
The person asking this is actually saying, consciously or not. "I want to be a scout who can start from A, find the way, overcome the obstacles and reach B for all different A and B points given in the geography of software and related issues, sometimes with hard obstacles."

Those who ask how do I get started think that this geography has a complete map. And they think, there is a group of shoes, clothes, tools and equipment lists that make it easier to move around this geography. They hope that the person answering will say to them "bro, look here, take this map, this is the equipment list, take these, keep the road clear."

Those who ask how to develop are a little different. They are already in geography right now. Maybe they didn't get to point B once or twice, or the B-points, which seemed close, hit them when they tried to walk. They are well aware of the problems that arise from the lack of maps or small sketches. They wonder if there are better sketches of the parts of the geography where they are now, even if not all of them. They wonder if there are better models of the shoes they use that don't hurt their feet.

First of all, as you understand at this point, there is no complete and reliable map of the phenomenal geography of software. We know some regions well, we can look at some places from afar and make predictions. 

Some of the maps showing the places we know have not changed for a while. Our trust in them is a little higher. Few people have reached some areas and there are some sketches shared by them. But many others who set out with those sketches were devastated.

This is the situation in software geography. If you are going to be scouting in this geography, you should start by knowing what you are facing.

While this is the state of the geography, the tools and maps we have, in order to scout successfully here, or in other words, no matter which point you start from point A in this geography, whatever point B you aim for, there are three things we need to do in a continuous tandem to find your way and to be able to travel that way:

1. Gaining the ability and tools to "survive" and "move" through academic learning.
2. Gaining experience with project-based learning, walking between many different points A and B
3. Socially mingling with the ecosystem, walking in groups, studying what others have learned and maps on your journeys, sharing new maps you've made, new equipment, helping each other, and sometimes even racing. And ***dev.to*** is a great place for that.

There is some information that we need to sit down and study systematically from various sources in order to do business on a subject such as software. For example, it is inefficient to throw yourself into the forest without investing in concepts such as the basics of computer science, algorithms, data structures, the processes we use, design paradigms, languages, libraries, or more fundamental math or platform knowledge. This is academic learning.

On the other hand, there are really things you can only learn while doing a project. Some of the things the path between A and B will reveal will not be available in any book. And more importantly to experience some of the sensations there. Knowing that your fear when standing in front of a dark forest is normal, taking precautions and still moving forward, or climbing a difficult cliff requires focus and discipline. These metaphors are no different from what you will feel when you wake up in your software project on a Thursday evening, after 12 hours of hard work, while you are still unable to solve a bug.

These journeys create obstacles and dangers no matter where you are in your career, and they will always do. The only way to avoid these dangers would be to never go to unfamiliar places in geography. But that strategy has very little gain. So anxiety, stress, and occasional failure means you are actually trying to go to B points that have value in geography and contain treasures. Knowing that this is normal and having the psychology and technical infrastructure that will not give up at that moment, the only way to go through these roads many times.

Third, socialize and be part of a network. Helping, racing, learning and teaching. While this socialization has become so easy today with meetups or various larger software events, it is a big mistake not to take advantage of the benefits of this socialization.

Now, in the light of all this, I will give a short example answer to these two questions. Because actually at this point I think you have clues on how to find the answers to these questions yourself. And you can know the logic behind these answers and adapt yourself.

### How do I get started with the software:

**1.Books or videos to read and study (Academic):**
* **Choose a language book:** Javascript (web), Python / Java (web services), C / C ++ / C # (game / embedded) or whatever you want
* **A book of data structures and algorithms:** an introduction to object-oriented programming with examples in your chosen language
* **An engineering / code book:** Like Clean Code, Design Patterns, Refactoring, etc.

**2.Projects to be made**
* Make small but fully finished simple projects
* Simple web applications, or micro games
* Choosing projects from areas where you can get help and ask questions if you get stuck.

**3.Socialize**
* Finding and following people who are interested in projects and similar ones on social media
* Going to meetups and events. There will be many other beginners like you at these events. Meeting them and staying in touch.

### How do I develop in software? Which areas should I develop?
* Improve math and platform skills.
* Knowing all aspects of critical tools in your field.
* Doing projects like crazy. Working on new projects without stopping. So you will see all the errors and omissions. You must do your best to fix them.
* Going to B spots where you have never been before. Following that every project teaches you new things.
* Learning to understand and manage risk and reward relationships.
* Learning to prioritize purposefully, pragmatically.
* Asking for help, helping
* Understanding the difference between leadership and management.
* Producing content, sharing information.
* Being in contact with the industry. Going to events, contributing to events.

That is all.

And finally, I want to end by stating something that I have mentioned many times before. In software, or in many other technical, artistic or creative fields, unfortunately very few questions have clear answers.

We need to learn to dance with these uncertainties in an ever-changing world we live in. So we should keep in mind that we need to play this game for the long term.

This fact can be frustrating for many people. But let's not forget that anyone could do it if it was an easy thing. Most people cannot display these behaviors anyway. That is why the few engineers who can show this struggle for a long time gain such high value. And that's why they are so few in the world.

No maps, no shortcuts. There are only intellectual models that enable us to understand the universe and the phenomena in it, critical abilities to be gained by working hard and patiently, obstacles to be struggled and overcome, and projects that will add value to the world.

In this world, we have choices that will determine our behavior. What will we choose?

This is AnatoliaCode. And I am a simple person trying to be a software developer who writes Turkish software development and technology blogs on [AnatoliaCode](https://anatoliacode.com) I hope you enjoyed it. 

Take care of yourselves.