These are some thoughts about my personal experience with learning a new programming environment like shell scripting (but this applies to almost any new environment). This is mainly based off mistakes and pitfalls I’ve fallen into in the past, so this post will be pretty cathartic, but perhaps it could be help someone out there.
- Don’t try to memorize every command, every API, every function, etc. Learn enough to become functional in the environment. Build something and move on.
- Think twice about what you’re trying to accomplish before considering tools.
- Have a structured process for getting help and use it frequently.
- Realize that commands/interfaces have different design goals and that’s OK!
- Know when a command/library/framework doesn’t mesh with the problem you’re trying to solve.
Let me elaborate on these points a little bit.
Point 1 (Memorization bad!?!)
Memorizing commands/APIs/functions/methods for their own sake is very much grabbing the wrong end of the stick when it comes to programming and it can actually hinder you in the long run.
Yes, it may be helpful for learning things like syntax, language conventions and system utilities, but beyond a certain point, enumerating over a list of commands or keywords without practical application is grossly ineffective and doesn’t lead to good retention.
Basically memorization should not be the focus when learning, but rather something that happens semi-autonomously.
Point 2 (Quality > Quantity)
This may sound obvious, but what I’m actually trying to say is take some time to actually use the language and commands you’re learning – preferably on projects that you care about. It may seem helpful and time efficient to try and learn a bunch at once (thinking of those articles with titles like “top 100 Linux commands every developer/sysadmin should know”) but in my experience, this approach is a complete waste of time.
Point 3 (Get help when you need it and know when to step away from a tutorial)
Of course, knowing how to read documentation is important as well: skim the man page, look at the docs, read an article or two online if you’re stuck, but don’t fool yourself – that’s not going to help you out with muscle memory or any kind of memory for that matter.
I think Shia has the right idea here. There’s no easy way to learn something. The best approach is to…
Use the thing, let it sink in, and don’t worry if you don’t know a certain syntax or a special command that you’ve practically never used because you don’t have a use-case yet. Finding a use-case for a technology is often a problem in and of itself, so don’t feel bad if you don’t see the point of something like Docker or Kubernetes.
Point 4 and 5 (Complex software is overwhelming, everyone copes differently, be street smart and know your limits)
On that note, there’s lots of money and influence involved in selling/marketing complex solutions to other Developers and IT staff in “the enterprise”. If you are a beginner, understand that most of this stuff isn’t supposed to be your domain – and that’s A GOOD THING.
Don’t feel pressured to add complexity to something simple just because everyone else is - especially when you’re starting out. I’m specifically thinking of all the frameworks and libraries used in modern web development (front and backend).
Give yourself ample time to understand core language features before diving into libraries and frameworks.
Lastly here’s some points to consider:
- Learning takes time; pace yourself and don’t cram until the point of burnout
- Real life practice > all the tutorials in the world
- Don’t get discouraged if other people have tried solving the same problem
- Don’t compare your work to others (unless you’re truly finished with a project)
- Be open to criticism and always try to improve
- It’s OK to not know stuff!
- Take a break from time to time