Answer the question
In order to leave comments, you need to log in
Fundamentals, algorithms, design. How to start?
Hello. My steps in the world of programming began with reading books like "I will teach you how to write code." Then I realized that these books are not at all effective for me. So I moved on to learning languages right behind the machine. That is .. I write a script in php, for example. There is a question "how to break a line on a separator?" I go to search engines, I find explode, then php.net, I look at the documentation on this function.
Then it dawned on me that you need to program with the help of the language, and not in the language. Now I have to invent the logic of scripts myself, or peep somewhere on the forums. The words "algorithms, trees, design patterns, templates, etc." far for me. Tell me how to start mastering this base, which is used (as I understand from habr and forums where I peep logic) everywhere in good-level projects.
Forgive me if your eyes are watered from questions of this kind. (I think they are asked regularly once a week, like "What language to learn" or "Where to start learning programming?")
Answer the question
In order to leave comments, you need to log in
The main thing to understand is that the computer is essentially very stupid, but the beast is hardy, sometimes even very. He can only do what you tell him, his drawback is that he does not know how to see the little things, and "think out" them for you himself. He needs to "explain" everything like a child.
It looks like everything is mixed up in your head.
1. What is software development? I think it doesn't contradict anything to say that this is writing code in the chosen language, aimed at solving the problem assigned to the developer. The solution can use as many algorithms as desired, or not use at all, except for those implemented in the standard library of the language.
2. Algorithms? An algorithm is a formal description of a solution to a problem, usually not tied to any of the programming languages, and not being an independent program. For example: searching for all substrings in a text is an algorithm that can be used in a program, but is not a program itself.
3. Data structures? Data structures are a way of organizing information in memory and/or on disk to make better use of it, or apply algorithms to it. For example: graphs and algorithms on them.
4. Design patterns? Design patterns, in the original design patterns, are solutions to typical situations when designing applications. We are talking about fairly large applications, although it is difficult to single out a clear criterion when an application can be called large. In the world of web applications, the most well-known pattern is MVC, although its applicability is not limited to the web.
Where to begin:
1. Acquaintance with the language. Without knowledge of the language, everything else is meaningless. It is better to start with well-known languages, for which there is a lot of literature and a large community: C / C ++, C #, Java, php7, python, JavaScript. Don't chase multiple languages at once. Don't chase newfangled languages like go, rust or elixir, they solve problems you have yet to understand. Don't go after exotic languages like lisp, haskel, erlang or ocaml, they have their fans but it's not the easiest way to start programming. Choose what is closer to you, compiled or scripted, strongly typed or dynamic, and go.
2. Practice implementing individual algorithms. This will allow you to consolidate your knowledge of the chosen language, expand your horizons and teach you how to distinguish these algorithms in the process of solving more complex problems. Here the fundamental work of Donald Knuth "The Art of Programming" will help you, although this topic is certainly not limited to this book alone.
3. Now you can take on more difficult tasks. One caveat if you go into web development: no one writes systems from scratch now, everyone uses frameworks. Perhaps it would be nice to dig into the design of a couple of such products, and ideally, try to build your own bike in order to better understand what and how it works and works.
The words "algorithms, trees, design patterns, templates, etc." far for me. Tell me how to start mastering this base, which is used (as I understand from habr and forums where I peep logic) everywhere in good-level projects.
Let's start with practice. This is many times better in all respects: By
practicing, you inevitably learn theory
You will not only learn what an array is, but also WHY it exists in this world Practice makes
you
a business person, not a volleyball fan
you can touch or see, which means that motivation itself (without psycho-training) will be incommensurably stronger than "tomorrow I will learn 2 more new terms and I will know 2 new terms, go nuts."
Stress and dopamine from waiting for an antelope at a watering hole will make your eyesight sharp, fingers hitting the clave - accurate and fast, and your memory will remember everything: how you spend 3 hours looking for a solution to a problem and how you solve it.
In theory, memory only works as a result of self-rape. your brain is not a fool and will not spend precious resources on high-quality memorization of what is already in the book. And yes - this understanding inevitably comes with the development of logic, which also develops exclusively in the process of programming practice. So:
Easily. Take Laravel and php will inevitably catch up in the process)
The first thing you need to start with is working in a team in a specific, strong Junior IT company. Don't go to big companies like Kaspersky Labs, Epam, iTransition. Better in a small startup, for example in Australia.
The second is technique. Only Apple, two monitors for the project and a clear understanding of what you want to do - UX / UI, PHP, Javascript (the most popular programming language). From development environment - Xcode, intellij idea, resource intensive, atom with node.js support, git.
Thirdly, it is important for you to understand the project itself and its significance. A striking example of a great game is TLA with a plot on a piece of paper in a cage.
And the last thing - visit meetups ( Onliner - Minsk, DevOps Engineer- Moscow), it is important for you to understand what programming language you are drawn to. You will master any programming language when you can master its logic and methodology.
You are doing everything right, although this may not be the fastest way.
Solving real problems gives a thousand times more experience than reading a bare theory. Yes, it will be shit code the first couple of hundred times, but this is a learning process, and so it is for everyone.
The main thing is not to stop asking questions and try to solve the problem in the best ways. Go back to your when in six months or a year and look at him with horror, and think what kind of idiot wrote this.
In short, this is a long story. There is no magic book that you can read and become a cool prog.
You can significantly speed up the process with a mentor, but he will want a lot of money.
All that a computer can do is take data "there", calculate something, put it or send it "there" ... All complex functionality revolves around these simple functions. Therefore, without data structures and algorithms, nowhere.
Each data structure has its own purpose. There are relatively simple structures, such as a flat array. There are complex fancy structures, such as JSON for megabytes, but they are always combined from simple ones.
There are simple algorithms, for example, sum all the numbers from an array, or calculate the average. There are complex algorithms that are also combined from simple ones.
Every data structure and every algorithm needs to be touched, felt, understood and mastered. Plus, learn to decompose tasks, determine where which data structures and algorithms are required, implement them separately, debug, bring to a working view, and compose, debug again and bring to a working view.
In general, this is the process of programming. And here you need 99% of hard practice and a pinch of theory.
If you practice hard enough and for a long time, then over time, many solutions will go to the subcortex and will be obtained automatically without thinking, then you can switch to more complex abstractions, such as patterns, etc.
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question