I recently finished my undergraduate studies in which I selected software engineering as my major due to my interest in coding. I have been a coder or at least playing with bits of code long before I went to college. Hence, I found the programming modules rather easy.
At college we learned the basics of programming or a a fundamentals of a programming language. Those are like the building blocks. Up until now, what I didn’t realise was, while we were busy learning how to query a database and display the results on a page, we did not pay any attention to the most important aspect of being a programmer. It’s not about understanding the syntax of all the common programming languages out there or being able to work using the all the relational database out there. It’s the ability to tackle and solve a problem.
After I finished college instead of applying for entry level jobs at giant software companies, I decided to push myself and get myself out of my comfort zone and apply for intermediate level jobs at companies that takes engineering very seriously, and this is where I recognised the limitations we (fresh college graduates) have.
Companies that I applied to sent me tests to solve challenging problems. While I was able to solve some of those, I found most of them challenging, and some of them difficult to interpret, because we are so used to following direct instructions.
To improve the problem solving skills and the mindset, I came up with the plan to form a new habit of practicing tough programming problems daily. I think any self-respecting programmer should do the same thing. Find challenging problems and try to solve it daily, rather than working on something using the same set of skills you acquired a while ago. I believe that by being continuously challenged will improve our mindset and the ability solve challenging problems much faster than any other method.
There are literally millions of resources for us to get started. I am currently going through the exercises available on exercism.io and HackerRank. Some of the exercises on these websites are rather easy, but there are genuinely challenging resources as well. CodeKatas is also highly suggested by expert programmers, and I also think solving open questions on StackOverflow would also do the same.
To go from novice to expert programmer, we should finding more challenging problems and keep practicing daily. What I have done is, blocked at least 1 hour everyday to practice solving difficult problems.