Debugging Bootcamp : Software techniques beyond windbg,gdb
What you'll learn
- Debugging as a deductive process
- Things to consider in production system analysis
- Methods to isolate root cause without rushing to attaching debuggers
- Understanding systems as permuatation of components
- Factors to consider while dealing with systems with components owned by different teams
- Different engineering communication channels that dictate the scope for debugging
- Familiarity of systems with more than couple of services
- Knowledge about more than one programming langauge
- Willingness to followup on ideas in daily engineering tasks.
Debugging is more than just attaching a debugger to a running program. Identifying the correct root cause is a skill. In addition, the complexity of distributed systems and multi-language stacks makes debugging even harder.
The key to a long career in software is the ability to build large systems. Large-scale systems cannot be created on a single machine using a single programming language. Hence one has to evolve into a generalist engineer to lead such efforts. Irrespective of role, understanding complexity and ability to navigate it during production fire fighting is a growth accelerator in the industry.
The course takes a generic view of workflows leading to frequently occurring debugging problems in large systems. Intentionally no tool details or deep dives are included. Instead, a guidance framework is provided for the students to explore further in their day job or software projects.
Distributed systems are a challenge in debugging. Not understanding a problem can easily lead one to debug the wrong services and stacks. It is always a communication problem first. Focus on building a generic debugging mental framework instead of becoming dependent on tools like windbg, and gdb as the primary response to any situation.
This course is for people who consider themselves problem solvers ahead of their designation and qualifications. For example, if you believe only developers should debug or only support should talk to customers, then this course is incompatible with your ideas.
Each section represents the debugging consideration for a particular scenario.
Who this course is for:
- Active programmers in any language with polyglot systems
- Full stack engineers
- Product developers targeting technical career path
- Students looking forward to work in software industry
I am a programmer with an MS in Electrical Engineering and 16+ years of experience in the software industry. I have held roles of principal engineer across multiple organizations, building products that serve billions.
I have designed and implemented software solutions for Digital Cinema Distribution, Distributed Systems, Embedded Systems, Map Making, Insurance, Email Servers, and Data acquisition systems for a problem in the Astrophysics domain (master's thesis).
The course(s) will help you in answering the following questions that dictate your priorities in life,
WHY are you pursuing your current profession?
How long do you WANT to pursue the current profession/job?
How long do you HAVE to pursue the current profession/job?
How long will your current profession/job RESPECT your contribution in exchange for rewards?
Remaining relevant for decades in any industry is not just hard but, in many cases, impossible. However, accepting this fact can help you plan a peaceful retired life.
There are many more variables in the equation of your peace of mind; start identifying them in these few minutes of assignments.
I find peace in exploring the connection between the "How" and "Why" of any technical problem. Over the years, I have realized that research is a lifestyle and engineering is an attitude.
The intent of all courses will be practical implementation and a long-term career perspective.
Your ideas and suggestions are always welcome.