Debugging: Software engineering perspective
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.
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.
Section 1: Introduction to communication flows in the industry
Section 2: Ecosystem Overview
Section 3: Production and Maintenance
Section 4: Deployment
Section 5: Integration
Section 6: Implementation
Section 7: Conclusion
Who this course is for:
- Active programmers in any language with polyglot systems
- Full stack engnieers
- 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 15+ years of experience in the software industry. I have designed and implemented software solutions for Digital Cinema Distribution, Distributed Systems, Embedded Systems, Map Making, Insurance, Email Servers, and Data acquisition system for a problem in the Astrophysics domain (master's thesis).
The course(s) are designed to 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. 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.
Don't fall into the trap of ignoring knowledge because it's available for free or at discount. If you have recently enrolled, try to finish it over the upcoming weekend as a challenge.
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.