# 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