Which is more critical, Problem Solving or Programming Language Knowledge?
Problem Solving or Programming Language Knowledge? This argument started a long time ago, and till now, it’s still a big topic, so which is more critical, Solving skills or Knowledge about programming language. Which is more important?
To start, let’s take a look at problem-solving skills first. Solving problems is the core of computer science. Programmers must first understand how a human solves a problem, then understand how to translate this “algorithm” into something a computer can do, and finally, how to “write” the specific syntax (required by a computer) to get the job done. Sometimes, a machine will solve a problem utterly different from a human.
Problem-solving is one of the most important skills a programmer should have, if not the most important. Too many programmers think that their job is to write high-quality code. While high-quality code is excellent, it is just a tool to solve a problem. If a problem can be solved better without code, they’re out of a job. The question becomes, how come problem-solving skills aren’t covered in programming books?
It is probably because most programming books are about equipping people with the tool, not the mindset. Think of programming books like repair manuals for a car. They will tell you how to fix the car, but they won’t tell you how to get yourself from point A to point B, which is ultimately the problem you’re trying to solve for the car.
And now about programming language knowledge. A programming language is a computer language programmers use to develop software programs, scripts, or other instructions for computers to execute. Although many languages share similarities, each has its syntax. Once a programmer learns the language’s rules, syntax, and structure, they write the source code in a text editor or IDE. Then, the programmer often compiles the code into machine language that the computer can understand. Scripting languages, which do not require a compiler, use an interpreter to execute the script.
Each of the different programming languages mentioned in the next section can be broken into more of the following types (paradigms) of languages.
- High-level (most common) / low-level
- Declarative / imperative / procedural
- General-purpose / domain-specific
- Object-oriented / concurrent
- Command / Compiled / Script language
- Answer set
So why is Knowledge about programming languages important?
Every programming language has its own set of advantages.
- Programming is vital in terms of productivity. One can get an ample amount of money if they know the programming language very well.
- Once someone understands the syntax of programming, it has become elementary to understand. Programming is fun if one has an interest in it.
- One can showcase their work with the help of programming languages.
- One can develop excellent, interactive website applications using a programming language. One can successfully augment the company processes with the help of the programming language.
- One can get a chance to learn and develop new things and generate profitable outcomes.
- It enables programmers to edit and create a variety of content. With time, one can improve their programming skills.
- Object-oriented languages offer a clear modular structure. This helps in defining abstract data types and modifying existing code. It provides an excellent framework. It quickly adopts software components and offers an excellent graphical user interface.
I know a lot of programming languages.
You have a leg, but you don’t know how to walk. You know many different languages, but you don’t know how to use them. So Problem solving skills are also necessary.
To be good at coding, you have to be good at problem-solving skills and Programming language. Because in my opinion, those two are both critical, so you have to be good at both.
First, if you want to be good at problem-solving skills, developing any problem-solving skill requires a fair amount of practice and time, more importantly, in the right way. Here’s a possible approach:
1) Learning phase: When you see a new problem, spend some time understanding and visualizing the scenario. Then, check all approaches that can be used to solve the problem — greedy, dynamic programming, divide and conquer, etc. Don’t look at the solutions till you have exhausted all your ideas — keep trying. For each approach, see how it scales. Most of these will either not solve the problem or won’t scale well. Depending on your solutions, you might want to code some approaches that you come up with.
If you can’t find a solution, go through the provided solution. Analyze it carefully. See why it works, how it scales, etc. After studying it, try to reproduce it on your own. Also, spend some time figuring out how this differs from the approaches you try and what additional information the solution may be missing. This will help you apply this solution to a similar problem in the future.
2) Strengthening phase: Often, it is essential to remember the techniques you come across during the learning phase. You should mark problems that you want to revisit later during the learning phase. Then, once you have tried good issues in the learning phase, go back to these observed problems, and reattempt them. If you can come up with the solution quickly, unmark it. Repeat this several times until you have mastered most of these problems, giving sufficient gaps to allow you to forget the exact solutions.
3) Finishing phase: Sometimes, after you have completed the strengthening phase, revisit the problems one final time. Read and understand each issue, and try to recall the solution within 30 seconds. Don’t use paper. Just remember the key ideas. If there are problems for which you can’t identify the solution, mark them, check the answers, and repeat this for significant issues after some time.
Once you complete this phase for a set of problems, pick a new set of the issues, and repeat. You’ll gradually be able to see improvement in your problem-solving skills.
And to get a good amount of Knowledge about Programming languages. Here are some methods for you:
1. Improve your learning method
Learning is an art, and this art is a quality in some from birth while the rest of the population earns it. As a programmer, you might feel overwhelmed by similar problem-solving tasks. Therefore, it is necessary to include entertaining techniques to learn effectively like flashcards, online quizzes, algorithmic puzzles, designing creative apps, etc. Always give yourself time to remember the concept rather than just referring to notes. Enjoy coding, or you will feel burdened by the concepts.
2. Gain fluency in debugging
Debugging is an integral part of programming. When a programmer compromises basic concepts of debugging, they waste precious time and effort searching for bugs. This is why debugging techniques, including divide and conquer and proper usage of logs and debuggers should be crystal-clear in your head.
3. Read other developer’s code
Before considering yourself a master already, see how a master creates a code. In simple words, browse through GitHub repositories, learn how other developers have written their code, and make your judgment on how to add quality to the code. This is how one can master coding.
4. Write readable code
As stated by Martin Fowler, “Any fool can write code that a computer can understand. Good programmers write code that humans can understand”. A good programmer should write code that is readable and understandable as -
● It will help you debug your code easily
● It will allow other developers to understand your code effortlessly.
5. Work on projects
Search for an app to build, learn how to get started, and work on it. I am not asking you to add quality, but challenge yourself and see how bonded you are with coding concepts. You will be able to judge your weak points and get a chance to improve.
6. Master one tech stack
Learning every other tool, framework, and programming language is suitable for professionals who have just begun their careers. However, once you have gained familiarity with almost all professional tools, it is recommended to pick one technology stack and master it. Proficient professionals can attract excellent and startling opportunities.
7. Have curiosity
Your curiosity to learn more and more may get you hired. A good recruiter hires candidates who can contribute to the company’s long-term growth rather than the one who only plans to use the known skills.
But to be good, there are some things you need to avoid:
1. Don’t Focus on Learning as Many Languages/Technologies as Possible
2. Don’t Jump Into New Technologies Without Being Certain They Fit Your Needs
3. Don’t Stash Away Your Work
4. Don’t Overlook Design, Inside and Out
5. Don’t Skip Documentation
6. Don’t Skip Testing Either
7. Don’t Only Focus on Coding
8. Don’t Fly Solo
9. Don’t Do It for the Money
And lastly, don’t ever feel that this is enough for you. Always try to improve your skills.