When I started my journey as a Programmer in 2017 my mind was always stuck on the logic building part and it still does the same sometimes but not that much, But how it possible? It is possible because of practice.
When I started my first job I was working on a very complicated project which I started from stretch all the backend logics was built by me using Node JS. I learned a lot during that time but learning new technologies will not help you with the logic building but when I was writing code on that project I touch a few things from the list below without knowing it.
You should try and practice these things as soon as possible to improve problem-solving and logic building skills but first learn a programming language so that you will confident enough to work with all of these things because these things need basic programming knowledge of any language i.e JS, Java Python, etc just learn core for these things no frameworks/libraries are required.
Data Structures: A data structure is a data organization, management, and storage format that enables efficient access and modification i.e Linked List, Binary Search Tree, Hash Table, etc.
Algorithms: An algorithm is a step by step method of solving a problem i.e FizzBuzz, Fibonacci and there are a lot of algorithms even you can build your own but try to practice toughest algorithms.
Design Patterns: They are typical solutions to commonly occurring problems in software design.
Programming Paradigms: A programming paradigm is a style, or way, of programming i.e OOP, Functional, etc.
Competitive Programming: It is all about solving problems revolving around algorithms and data structures as quickly as possible. If you want to improve this skill then challenge yourself that you can write an algorithm in 1 minute and start your stopwatch and after 1 minute stop. if this is boring then try another way of doing it and the way is participating in any Speed Programming Competitions to improve this skill well, I’m not a competitive programmer but I will try to improve as much as I can.
Mathematics: Shit! I know but very compulsory for logic building.
Recursive Programming: It is a method where problems are solved by repeatedly calling a function on sub-instances of the problem.
**Dynamic Programming: **It** **is mainly an optimization over plain recursion.
**Refactoring: **Wait! what? I know you are thinking that how code refactoring can help you to improve your logic building skills. Now suppose if you wrote a recursive function with O(n²) complexity if you refactor that code and try to apply dynamic programming techniques so definitely you can improve the time complexity of your codebase. So always refactor your code.