# The Complete Software Developer's Career Guide
> Everything in this book could still be classified as soft skills since I’ll be
> talking more about ==what you need to know== and do theoretically rather than
> how to do it.
## Getting Started as a Software Developer
> [!quote] If you have a dream, you can spend a lifetime studying, planning and
> getting ready for it. What you should be doing is getting started. — Drew
> Houston
### How to Get Started
- You have to know how to manually do something _before_ you can automate it.
- The process of software development always begins by first understanding the
problem to be solved.
- Software development is more than writing code
- Design
- Writing code is a discipline in itself.
- Testing
- Deployment
- Debugging
- Books recommendation
- Code Complete
- Clean Code
- Make a plan
- Working backwards from the goal
### The Technical Skills You Need to Have
- The skills that pay the bills (soft ones)
- One programming language
- Which one is not that important.
- Eventually you will know several, but don't do that upfront.
- Go deep and focus on learning the ins and outs of a single programming
language.
- How to structure code
- Checkout _Code Complete_
- Really the art part of SDE.
- Object oriented design
- Algorithms and data structures
- Checkout _Cracking the Coding Interview_ by McDowell
- A development platform and related technologies
- Platform = A specific environment that you develop for, which has its own
ecosystem and particularities.
- Don't just pick a language; pick a platform as well.
- Framework or stack
- Framework = a set of libraries
- Stack = a set of technologies, usually including a framework, that are used
together to create a full application
- Basic database knowledge
- ==Most developers are expected to be able to write code that can interact
with a database==
- Source control
- Build and development (DevOps)
- Testing
- Debugging
- Methodologies
### How to Develop Technical Skills
1. Get a good idea of what you are learning and what the scope of it is.
2. You need a goal.
3. Gather some resources for learning. (Not just books)
4. Create an actual plan for learning.
5. Dive in.
- For each module, learn enough to get started, play around
- Learn by doing.
- Do not learn too much up front, utilize natural curiosity to drive your
learning.
- Take what you learned and teach it to someone else.
> [!warning] Learn by Doing If you don't have an immediate need for the skill,
> you might even question whether you need to learn it at all.
- Teaching framework
- The big picture: what can you do with the technology?
- Eliminate all unknown unknowns.
- "I know X can do it. I'm not sure how, but I can figure that out later."
- How to get started.
- The 20% you need to know to be the most effective.
- Pareto principle: 20% of something produces 80% of the results.
- Learn by doing lets you figure out what the 20% is.
- Read the experts' writing.
### What Programming Language Should I Learn?
> [!tip] What language you learn doesn't actually matter nearly as much as you
> might think it does.
>
> Programming today involves utilizing libraries and frameworks much more than
> language features.
- Job prospects and future.
- Technology that you are interested in.
- Difficulty level.
- Resources available to you.
- Adaptability.
### Learning Your First Programming Language
- Start by looking at a working application.
- Find a few good resources or books and scan through them.
- Learn how to create Hello World
- Learn basic constructs and test them out with real problems.
- Know the difference between language features and libraries.
- Reviewing existing code and and work through understanding each line. (Don't
care about the why)
- Build something... Lots of somethings.
- Books recommendation
- Cracking the Coding Interview
- Programming Pearls
### Going to College
- Pros
- Many companies still hire developers with degrees
- Good base knowledge of computer
- Structure
- Science concepts
- Internships and other opportunities
- Cons
- Time
- Cost
- Outdated or non-real world education
- Distractions
- Strategy
- Start with a community college
- Avoid debt
- Take a year off, get a job, and save money
- Get scholarships
- Get a part-time job while going to school
- Make learning your responsibility
- Do side projects
- Intern
- Get your degree while you are working
### Coding Boot Camps
- Pros
- Short learning time
- High placement rate
- Low price
- Focused study
- Real work-like setting
- Work with other highly motivated people
- Cons
- Huge time commitment
- Can be extremely difficult
- Still somewhat expensive
- Plenty of scammy code camps
- No degree to fall back on
- May be lacking in some areas of computer science knowledge
- Strategy
- Research to make sure you aren't being scammed
- Save up to pay in full
- Clear your schedule completely
- Stay after and network as much as possible
- Make sure you are the top of the class
- Learn the basics ahead of time
### Teaching Yourself
- Pros
- Cost is low or nothing
- Self-education is one of the most valuable skills you can learn
- You can learn at your own pace
- You can work around your schedule
- You can go deep on subjects you are interested in
- Cons
- You have to figure out what to do and what to learn
- No help with finding a job
- It's easy to lose motivation
- Social isolation
- Likely to have gaps in knowledge
- Strategy
- Come up with a plan
- Set a schedule
- Network while you are learning
- Find a mentor
- Build at least one side-project
- Subscribe to a site like Pluralsight
## Getting a Job
### Internships
- What is internship?
- Some are like real jobs
- Some are literal competitions
- Some are basically "errand boy/girl"
- Payment doesn't matter
- How to get an internship?
- Internship programs in colleges and universities.
- Apply for internships.
- Make your own internship opportunity.
- Interview for an internship
- I'm eager and hungry to learn and contribute as much as I can.
- I'm the hardest worker you'll ever find in your life.
- I don't have to be managed. Set me on a project, and you can consider it
done.
> [!tip] Focus on demonstrating a basic level of competency in the job and the
> traits above.
- Your job is simple: Save your boss as much time as possible
### Getting a Job without Experience
> [!warning] The biggest risk for companies hiring a developer is hiring someone
> who doesn't actually know how to code.
- A blog, or twitter or something similar
- Portfolio, GitHub
- Create your own company
- Prepare for interview
- Build your networks
- Offer to work for free
- Offer to work on a small project
- Work in the mailroom
- Get certifications
- Be persistent. The squeaky wheel always gets the grease.
## What You Need to Know about Software Development
## Working as a Developer
## Advancing Your Career