So you want to be a Wizard [^1]

About zhis zine

Tips from Julian, looks like mix of team-work and self-productive tips.

Table of Contents

  • asking questions is good
  • reading the source code which knows more than you
  • debugging tools are your friend
  • design doc helps you to FEEL like a wizard
  • building expertise, how to learn something that takes years to master?
  • strategies for learning, wow I learned SO MUCH

Asking good questions

You are working in team, do I need to ask a question?
Ask questions, don’t be afraid to ask for help. If no one knows the answer, try to figure it out anyway.

What if I’m doing something non-standard and have issues? Or I don’t really understand what I’m doing?
When you do something non-standard and have issues, you need to go deeper into details, to understand how things working under the hood. It can be software, hardware, or whatever.

What’s a good question, some rules?

  • Are easy for the person to answer, choose right one
  • With answer you get required information
  • You provide some context and information when asking, tell what you know, guess answer, do some research before asking. With this strategy you can even avoid asking questions that you already know the answer to, or which are too basic or too complex.
  • Choose the right person to ask, maybe less experienced, or more experienced, depending on the question.
  • Find a good time, be respectful of other people’s time.
  • Ask yes/no questions when possible.

Read the source code

What if their no one knows the answer, documentation provide misinformation, coworkers are busy, etc.? What to do?
In that situation your friend is source code, it’s newer lie and can provide required information. Sometimes you need to get your hands dirty and work with source code: debug, test, print statements, introduce bugs and experiment with it. Also don’t always trust comments (especially yours ☺).

Strategy to read source code?

  • Grep for the error message
  • Read the whole code if possible (less than few thousand lines, use cloc)
  • Edit the code 🙊, debug, test, experiment.

♥ Debugging: love your bugs

I got a bug, is this end of the world, how to deal with it?
Not really, debugging! Love your bugs. Debugging is a great way to learn and write more reliable code (don’t break things). Be confident I can fix it, you already fixed a lot of hard bugs before. The harsh reality of bugs, they reveal problems with your mental modal, maybe you don’t know something or do it not the right way. Bugs give you opportunity to learn something with immediate feedback.

Can I ignore bugs and think this is normal and this is some mystery?
No, bugs happened by logical reason, there are no mysteries, keep this in the mind.

Learning at work

Sometimes you need to learn X to do Y, good strategy (practical steps) to do it?

  • Read source code
  • Ask questions
  • Watch talks
  • Read docs/blog posts
  • Do experiments

More ways than debugging to work and learn “with bugs”?

  • Follow up on bugs you couldn’t figure out (issues)
  • Volunteer to do work that seems hard
  • Pay attention to other’s code (PR)
  • Watch more senior people operate

Is good idea to immediately integrate something which you want to learn (you haven’t enough experience) into work?
If you’re learning something don’t try to immediately integrate it into your work. Need to discuss and take time to understand the new knowledge.

Learning on my own

Good strategy to learn something new?

  • Go to a conference, especially in area I don’t know well.
  • Implement something that seems hard, I need some challenge!
  • Select concept and spend few hours on it (3+).
  • Try a new program, library, framework, etc.
  • Do some experiments, can X do Y?
  • Read a paper, Adrian “The morning Paper” is great?
  • Teach someone else, event through notes

How to design software? Let’s assume you worked hard on something, but at the end you just wasted your time?

  • Planning and proof of concepts are your friends.
  • You can’t always predict how requirements will change, try yours best to solve current problems and try to avoid this in the future.
  • Sometimes “good enough” is really awesome and this is good starting point.

Scenes from writing desing docs

How to write design docs?
Explain current working processes, maybe you not really understand them Ask questions and give your work for review If someone disagree, figure out a better plan together Design always change, this is evolving process. So try to actualize it.

Build expertise

How to get better at X, I know a little about it? What you can do?
You need to continuously work with it, this is super fun to get better at something. Pick something and spent significant amount of time on it, after some time you’ll see results. Check learning note for more information. Today is the best day to start learning!

How to learn new skills, maybe some detailed plan to combine learning and practice?

  • First learn fundamental concepts, what is “system call” at all? At this step you need figure out which ideas are most important and learn them! Sometimes you need to dig in into things you don’t understand.
  • Do experiments, what system call in THIS program using, what’s in /proc, what happens if I do X or Y?
  • Read books (for me, it always better method to learn)
  • Do hard projects
  • Learning is marathon not a sprint, find time to it and don’t waste it

Take on hard projects

How confidence helps you to learn?
There always someone who “better” than you, but you have own advantages, be proud of you:

  • You learn fast in changing world
  • You work hard on projects, which really hard understand
  • You have years of experience
  • You are good at debugging
  • Someone’s great gotta do this