I am a self taught programmer (python). I learned things because they required to solve some problem. You face problem and then you find solution. I used to solve puzzles in childhood for competative exams. But now as adult, it is very difficult to connect with imaginary problems which you never deal in day to day life. It makes me feel empty - learning something to just get a job. Recently I picked up interest in OS because I started to notice my limit with application programming. I learn to write comments and importance of git, after working in startup where you keep wearning thousdands of hats daily and forgot what code last week. And I feel this is very organic approach to learn.<p>Being on both sides of table, whenever I conduct interview I just ask simple programs to do (mostly fizbuz) and try to gauge candidate passion by understanding projects s/he worked and problems faced. If candidate passes fizbuz, I believe s/he has basic understanding of logic. Other things can be thought easily if candidate has passion.<p>I have friends in university who only talks about algos but can't write single line of code (I am not blaming them, it is just their field doesn't require intense coding. What i am trying to say here is, writing good code is like craft. You need to write actual code to excel in craft. Solving leetcode problem successfully doesn't imply you can write good code automatically). Last time when I switched jobs, I studied couple of algos and now I forgot them. I am again switching and thinking to start with leetcode. The biggest problem in industry is hype. These days even small stupid IT shops are asking for hackerrank test with full stack developer. Lot of focus is still on memorization and hype.