3 ms·
Some things that have helped me: 1. Look at prior art. Many problems have been solved before. It can be more fun to dive in and create your own solution, but l
by modernerd 7y ago
Some things that have helped me:
1. Look at prior art. Many problems have been solved before. It can be more fun to dive in and create your own solution, but looking for previous solutions first often saves time, results in a better solution, or may show you that you don't need to write the code in the first place.
2. Write down the problem you are trying to solve before solving it.
3. Solve the problem multiple times before committing to a final solution (if you have time). Unless the problem is familiar, your first solution will not be the best one.
4. Learn when to ask for help. This depends on the scale of the problem, but in general if you aren't making progress within half a day, consider asking someone else for their help and ideas.
5. Do rubber duck debugging. People who talk through problems aloud are better problem solvers and learners. https://www.teachervision.com/problem-solving/think-aloud-strategy https://www.teachervision.com/problem-solving/think-aloud-st...
6. Make documentation easily accessible. Some recommend spaced repetition like Anki (https://sivers.org/srs https://sivers.org/srs) to recall library functions and patterns. I've found that just having locally cached documentation in an app like Dash (https://kapeli.com/dash https://kapeli.com/dash), Zeal (https://zealdocs.org/ https://zealdocs.org/) or Velocity (https://velocity.silverlakesoftware.com/ https://velocity.silverlakesoftware.com/) to be a big help, especially if you don't just work with one language every day.
7. Do programming puzzles. I've found it helps a lot with software maintenance and other problem solving at the micro level. (It doesn't generally help with big systems design because puzzles tend to be smaller in scope than that, but a lot of our work is maintaining existing code.) I find https://exercism.io/ https://exercism.io/ the best for this because you usually complete puzzles in the same environment you'll use for daily work (your text editor/IDE of choice), rather than in a web-based environment with limitations.
8. Consider courses like HtDP (https://htdp.org/2018-01-06/Book/ https://htdp.org/2018-01-06/Book/ ) and the Clean Code series (Clean Code, The Clean Coder, Clean Architecture) for basic advice on structuring systems. Find others at https://mustread.tech/books https://mustread.tech/books
9. Make things. Keep them small in scope to begin with so that you finish some of them.
10. Surround yourself with brilliant people. Feeling like the dumbest person in the room is intimidating but you learn more.
11. Read and learn outside of the field of software. In the words of Feynman, “everything is interesting if you go into it deeply enough.” I like In Our Time (https://www.bbc.co.uk/programmes/b006qykl https://www.bbc.co.uk/programmes/b006qykl) and https://www.thegreatcoursesplus.com/ https://www.thegreatcoursesplus.com/ and https://www.masterclass.com/ https://www.masterclass.com/.
12. Look after yourself. Eat well, sleep well and exercise.
- vymague 7y ago>It doesn't generally help with big systems design What do you think helps specifically with that?
- modernerd 7y agoRead a lot of code. Pick one of the most popular libraries in a language you like and commit to reading it, understanding how it was architected, and tweaking it. Talk to other people who build “big systems”, whatever you decide that definition means. Ask them lots of questions. (Not the “Emacs or Vim?” kind. Instead: “When you wrote x, where did you start? How did you arrive at the solution you found? What would you change if you started again today?”) Build systems, big and small, on your own and with others. If you're not sure what to build, I like “Exercises for Programmers” by Brian Hogan: https://pragprog.com/book/bhwb/exercises-for-programmers https://pragprog.com/book/bhwb/exercises-for-programmers The problems are still pretty trivial but a little larger in scope than most from https://exercism.io https://exercism.io. Beyond that, I try to find videos or tutorials of people solving real-world problems. For example: Go: https://gophercises.com/ https://gophercises.com/, https://gowebexamples.com/ https://gowebexamples.com/, https://www.usegolang.com/ https://www.usegolang.com/, https://lets-go.alexedwards.net/ https://lets-go.alexedwards.net/, https://testwithgo.com/ https://testwithgo.com/ C/C++: https://handmadehero.org/ https://handmadehero.org/ Haskell: https://typeclasses.com/ https://typeclasses.com/ Mixed: https://howistart.org/ https://howistart.org/ Pair programming and live coding videos on YouTube can be worthwhile too. “Hacking with Andrew and Brad” is an example for Go: https://www.youtube.com/watch?v=yG-UaBJXZ80 https://www.youtube.com/watch?v=yG-UaBJXZ80 “Pair Programming with Jon Skeet” is another example: https://www.youtube.com/watch?v=zvz2omT9fzk https://www.youtube.com/watch?v=zvz2omT9fzk You get to hear people talking through their thought process and learn how other people solve problems and structure solutions. The Twitch Science and Technology section is another place to find similar stuff: https://www.twitch.tv/directory/game/Programming https://www.twitch.tv/directory/game/Programming I like Tsoding for functional programming: https://www.twitch.tv/tsoding https://www.twitch.tv/tsoding And SerpentAI for Python/AI: https://www.twitch.tv/serpent_ai https://www.twitch.tv/serpent_ai Watching people code can be dull or exciting depending on your mindset. I try to dip into these channels occasionally and soak up ideas from them, then go away and make things. I don't generally learn much without writing code too, and look for technical books and courses with exercises and problems. We need more of this, though. I wish there was a programming puzzle site full of problem statements of the type, “build an application that does x”, where solutions are ranked by the community and sorted by language. It would be such a helpful resource.