CHAPTER ONE: Intro
- Introduction
CHAPTER TWO: Should You Become a Developer?
- Should I Become a Software Engineer/Developer?
- What Is a Day as a Software Engineer Like?
- Production Issues
- Why Should I Want to Work as a Software Engineer?
- Where Do Software Engineers Work?
CHAPTER THREE: What to Learn in High School
- What Should I Learn in High School to Help Me Become a Software Engineer?
- Learning a Programming Language
- General Overview of Aspects of Programming Languages
- What Programming Language to Learn First?
- Why Should You Learn Programming?
- How to Learn Programming for Beginners?
CHAPTER FOUR: What Computer to Buy
- Which Type of OS/Computer Should You Buy for School/College for Someone Interested in Being a Software Engineer?
- Why Not Linux? Most Web Servers Are Linux.
- What Hardware Do You Need for Your Windows PC?
CHAPTER FIVE: College
- Choosing a College/School to Be a Computer Software Engineer
- So How Do You Decide Your College/Major?
- College Locations
- Can You Become a Software Engineer without a Degree?
- What Does a Software Engineer Education Cost?
- How Much Do Software Engineers Make Out of College?
- Co-Op
Intern Programs
One Person’s Experience
A Company that Helped Manage Money
A Consumer Electronics Firm
For My Company with a Friend—Not Co-Op
A Small Start-Up Document Imaging Company
- Planning Your College Courses with an Eye toward a Software Engineering Job/Programming
- General Electives
- What Computer Language Classes to Take?
- Planning to Transfer in the Future?
- If You Prefer to Go Full-On Computer Science
- Surviving College as a Computer Science Major (or a Variation of That)
- Computer Labs/Home Computers, Assignments, and More
- Multi-Person Programming Projects
- Some Other General Trivia
- What Do You Do If You Have Trouble with Your Classes?
- When You Have Finished Your Degree
CHAPTER SIX: What They May Not Teach You in School
- What They May Not Teach You in School about Working as a Software Engineer
- Time Management
- Source Control and Branching
- Business Focus/Prioritization
- The Rules and Business
- Working with Others and the Art of Influence and Leadership
- Continual Improvement
- Creativity
- What Do You Want?
- Creating Your Own Opportunities or Taking Advantage of Them
- Perfect Is the Enemy of Done/Money
- Software Development Life Cycle (SDLC), Auditing, Etc.
- Coding for a Production Environment
- Professionalism
- The Art of What You Should or Shouldn’t Say No To
- Interviewing
- Working with Your Manager
- Managing Stress
- Teamwork
CHAPTER SEVEN: Where to Work
- Here Are Some of the Best Places to Work for a Software Engineer
- How Company Size Can Affect Your Experience
- Regulated vs. Unregulated
- Working in a Place You Like the Most
- Organization Culture
- What Area of Software Engineering Should I Go Into?
- Which Tech Stack Should You Learn/Work In?
CHAPTER EIGHT: Preparing to Find a Job
- Your Resume
- Consulting
- W-2 vs. 1099 vs. Corp to Corp
- 1099
- Corp to Corp
- Consulting vs. Full Time
- A Consulting Gig
- What Is a Full Stack Developer?
- Staffing Firms and Recruiters
- Do You Need Certifications?
- Finding a Job
- Colleagues, Friends, and Family
CHAPTER NINE: Interviewing
- Portfolios
- Things You Should Do to Prep for the Interview
- Some Example Interview Questions
- Things You Should Know
- Recruiter Screening
- Initial Screening
- Interview (the Main Event)
- Salary
CHAPTER TEN: Starting a New Job
- Working with Others
- Impressions
- What Does It Mean to Be a Good Team Member?
- Developing Large Features or Software Products
- Mentor
CHAPTER ELEVEN: Deadlines, Estimates, Communication, Notes
- Early Career: Software Engineering Deadlines, Target Dates, and Estimates
- What Should You Do About Estimates And Deadlines?
- Early Career: Team, Internal, External Conversations/Messaging
- Keep Track of What You Need to Do
- Keep Track of What You Learn
CHAPTER TWELVE: Working with Your Manager
- What Does Your Manager Want?
- Take Control of Your Career
- Act Professional
- Communicating with Upper Management
- Managing Up
- The Power of Taking Responsibility
CHAPTER THIRTEEN: Mindset and Psychology
- Think Like an Owner
- The Power of Positivity
- Impostor Syndrome
- Don’t Be a Jerk
- Change—The Only Constant
CHAPTER FOURTEEN: Continuous Learning
- Programming Language
- Constant Learning
- Team Presentations
CHAPTER FIFTEEN: Getting a Promotion/Raise
- Job Titles
- What Purpose Do Job Titles Have?
- How Do You Get a Promotion/Raise?
- Titles, Role, Responsibilities, Money
- Be Introspective
CHAPTER SIXTEEN: Changing Jobs/Roles
- Leave on Good Terms
- Counteroffers
- Changing Teams
CHAPTER SEVENTEEN: Career
- Making Money from Your Own Software
- Write an Android/IOS App, Websites, Desktop App, Etc.
- Marketing
- Publishing Your Software
- Book Authoring
- Your Company Has Been Bought—Now What?
- Avoiding Layoffs
CHAPTER EIGHTEEN: Process: Waterfall
Critiques against Waterfall
CHAPTER NINETEEN: Process: Practical Agile with Scrum
- Scrum In the Real World for Software Development
- What is Agile?
- Agile Software Development Process Pros and Cons
- Mitigating the Cons of Agile
- Agile Sprints/Iterations
- Agile Is Not Waterfall
- What Is Scrum?
- Daily Scrum
- Scrum Roles
- Planning, Grooming, Reveal, and Retro
- Sprint Planning
- The Reveal
- The Retrospective (or Just Retro)
- Backlog Grooming
- Scrum of Scrums
- Tracking Progress
- Agile with Scrum How To
- Agile While Managing New Features and Support
- You Created Your Stories for Your Project, but Now You Need a Plan—Agile Project Plan
- Builds/Continuous Integration
- Agile Body Snatchers
CHAPTER TWENTY: Process: Requirements
CHAPTER TWENTY-ONE: Process: Architecture/Design
- Architecture/Design
- Enterprise Architecture (EA) Frameworks
- The Open Group Architectural Framework (TOGAF)
- Whole System Level Architecture Patterns
- Designing Resilient/Redundant Systems
- Discussions
- UX Design
- A Simplistic Architecture Approach
- High-Level Solution Proposals
- Incremental Action Plan
CHAPTER TWENTY-TWO: Process: Source Control Management
- Source Control Management
- Functionality and Workflow
- Branch Plans
- Workflow and Branch Plans
- Gitflow Branching
- Source Control Products
CHAPTER TWENTY-THREE: Process: Implementation
- Implementing a Feature/Bug Fix
- Unit Testing
- Test Driven Development (TDD)
- Pair Programming
- Logging
- Testing a Feature/Bug Fix
- Builds/Continuous Integration
- Merging the Change
- Should You Comment Code—Write Them, How Much, or Not?
- Software Development Environment
- How to Write Cleaner, More Understandable Code
- Environments
- Dev-Ops
- What Are the Main Correlating Factors to the Introduction of Bugs?
CHAPTER TWENTY-FOUR: Process: Testing/Validation
- Testing
- Automation Testing
- Integration Testing
- Fuzz Testing
- Parity Testing
- Performance Testing
- Validation
CHAPTER TWENTY-FIVE: Process: Deployment
- Deployment
- Old/New (A/B) Deployments
- Rollbacks
CHAPTER TWENTY-SIX: Process: Production
CHAPTER TWENTY-SEVEN: Process: Support
- Coding, Testing
- Cost
- Performance and Hardware
- Deployment
- Logging
- Tracing
- Time Syncing
- Network/Application Tracing
- Monitoring
- Alerting
- Standard Operating Procedure (SOP) or Runbook
- Training
- Escalation Process for Critical Incidents
- Operational Impact
- How to Handle Support with Agile Scrum Teams
- Prioritizing Investigations/Escalation Process for Noncritical Incidents
CHAPTER TWENTY-EIGHT: Process: Audits
- Audits in Highly Regulated Environments
- Preparing for an Audit
- What Should You Expect during an Audit?
CHAPTER TWENTY-NINE: General Development
- Languages
- Algorithms/Data Structures
- Naming Classes, Methods, Properties, Etc.
- Building Software to Reduce Risks and Handle/Recover from Errors
- Code Performance and Improving
- Code Reviews
- Principles
- Getting in the Zone
- Windows Debugging
- Overengineering
- Minimum Viable Product (MVP)
- Thinking Like Your Customer
- Solving Hard Critical Support Issues
- Avoid Duplicating Code
- Improving Testing
- User Interfaces
- Technical Disagreements
- Deciding If You Should Fix a Bug Now
- Testing Private Methods
- Coupling / Decoupling
- Root Cause Analysis
- Understanding Hardware
- Networking
- File Systems
- XML/HTML/CSS
- Resource Utilization
- Prototyping
- Windowing Systems
- Double Check Locking
- Unicode
- Security
- Privacy
- Public Key Crypto Systems
- Exception Handling
- Proof of Concept (POC)
- Object Oriented Languages
- Software Patterns
- Upgrade Path
- If I Have a Hammer Everything Looks Like a Nail
- Fail Early
- Asserts
- Contracts
- Operating Systems
- Databases
- Data Science
- Dependency Injection
- Time Use for Event Ordering
- How to Handle Tech Debt
- Open Source Software
- Data Pipelines
- Context and Notetaking
- Managed Languages
- Floating Point Numbers
- NP_Complete Problems
- C# Using Var
- Perceived Speed
- Holy Wars
- Message Streaming
- Should You Learn Assembly Language?
- Writing Apps for Profit and Fun
- Will AI Replace Software Engineers
- Highly Regulated Environments
- Recursion
- Cross-Platform Development
- Rate Limiting Algorithms
- Plugin Framework
- Discrete Math
- Finite-State Machine
- Compiler/Interpreter Design
- Deterministic Disposal at End of Function Scope
- Data Objects
- .NET Source Code
CHAPTER THIRTY: Multithreading
- Threading Synchronization Primitives
- Threading Topics
- Threading Issues
- Threading Patterns
- Multithreaded Events
- Does Your Sleep(0) Smell?
CHAPTER THIRTY-ONE: Time Management
- Which Communication Method to Use?
CHAPTER THIRTY-TWO: Management
- Intro
- How to Become a Software Engineering Manager
- One on Ones
- Performance Discussions
- Compensation Discussions
- Don’t Micromanage
- Planning a Project
- Time Off
- The Power of Questions
- Role in Scrum
- Role as Architect
- People Reviews (Yearly or Ideally More Often)
- Project Management
- Mentoring/Career Path
- Employee Concerns
- Project Details
- Example Day in the Life of an Engineering Manager
- Team Size
- Managing Management Expectations vs. Team Capability
- Delegating
- Staffing/Hiring
- Onboarding
- Outsourcing of Development Work
- Team Collaboration
- Managing Large Multi-Team Projects
- Project Manager(s)
- Dependency Management
- Scrum of Scrums Meetings
- Be an Advocate for Your Team/Members
- Compensation
- The Gray Area
- Clean Up Your Backlog
- Aligning Code with Your Teams
- When/What to Escalate?
- Agile Team Management
CHAPTER THIRTY-THREE: General Topics
- When Good Architecture Isn’t Good Right Now
- How to Reduce Overhead Costs for Your Business—Keep Processes Under Control!
- Reinvention
- Generating Ideas/Solutions
- Failure
- Turning Failure into Success
- Integrity and Playing Fair
- Cryptocurrency
- Ideal vs. Practical
- Rant On Why Software Architecture Is Not Exactly Like Building Architecture
- Operations and DBA Teams
- Why Patch Rather Than Fix?
- Computer Science and Life
- Third Party Products/Libraries
- Why Is X More Reliable Than Software?
- Diagnosing Windows Issues
- Staying Safe in the Digital Age
- Your Own Website
- Smaller Releases
- Impact on Society
- How to Be the Worst Software Engineer
- Useful Tools and Websites
- Best Developer Blogs
- Reading List
CHAPTER THIRTY-FOUR: Notable Software/Technologies
- Windows
- Linux/Unix
- Android
- iOS
- Machine Learning
- Docker Containers/Kubernetes
- NoSQL
CHAPTER THIRTY-FIVE: Appendix
- Sites/Links/Information
- More Information / Errata
- Dedication