Recommendations for Starting  

I want to start this course off with some general recommendations for how to get started. If you ask people for advice on learning how to code, you will be given many different answers for what to learn and how to learn it. Much of the advice you will receive will not be wrong, but it can be overwhelming when you do not know what the best option is. The truth is, there are many different flavors of programming and much overlap between them all. It is not bad to learn one language over another or one style over another. 

In this section, I will cover some general recommendations I have for getting started as well as frequently asked questions that you may have. The recommendations I make here are based on the assumption that you are new to programming and need some help getting started. Once you land your first job, you can steer your career in whatever direction you fancy.  

First Steps 

No matter what path your career takes, there are some basics that you will need to learn first. I just want to give you an overview of the starting point up front, with more details being covered in the next few sessions of this course: 

  1. You need to understand the options available to you for software development jobs. 
  2. You need to choose a specialty; what type of applications you are going to build or the ecosystem you want to work in. 
  3. You need to choose a language. 
  4. You need to create a curriculum. 
  5. You need to make a study plan.
  6. You need to take action. 

Those are the steps that it takes to get started on your journey which we will cover over the next several modules of this course. You can worry about everything else – networking, building a portfolio, job hunting, etc. – after you have a plan and have already started learning. These topics are all covered in future sections of this course. Let’s dive into step one now.  

Overview of the Flavors of the Software Development Industry 

The field of software development is not just about being a coder; there are hundreds of verticals you can work in and thousands of ways to specialize in the industry. Let’s take a high-level look at some of the work environments and job options available to you. Keep in mind that all of these jobs and company types do overlap quite a bit and these are just generalizations.  

Types of Companies 

The atmosphere at companies can vary greatly depending on the type of company and industry. While you may not have the luxury of being overly selective when searching for your first role, you should take the time to thoroughly research the company to see if the role and company align with your ideal workplace and values. 

Tech Companies 

Companies whose primary products are software or hardware applications are called tech companies. They include companies of all sizes but Facebook, Apple, Amazon, Netflix, and Google – called the FAANG companies – are some of the most well-known. I would also include two other renowned tech giants, Microsoft and Salesforce, on this list. 

There are a few notable differences between working at tech companies versus non-tech companies. In my experience, tech companies usually appreciate their software developers more and give them more freedom to be creative and innovate. They are usually more receptive to adopting modern technologies and are often forward-thinking about the changing tech landscape. Additionally, tech companies are typically more open to hiring employees with non-traditional backgrounds, such as self-taught developers and coding school graduates. 

There are small considerations I want to mention that you may not find in a job description. The developers I know who work for large non-tech companies in industries like finance or healthcare, usually have a business casual dress code (definitely no t-shirts or jeans for them!). and must adhere to a set schedule that requires them to be at their desk during regular business hours. If those two factors aren’t a part of your ideal work environment, consider if there are other company benefits that outweigh them or if the company can offer you any flexibility in those areas. 

At times, in non-technical companies, the needs of the business and bottom line overshadow the technical expertise and potential offered by a team of developers. Sometimes business people are even put in charge of technical decisions. These companies traditionally don’t embrace the ‘get your work done whenever’ attitudes like many modern software development companies where their employees and developers are given the flexibility and many perks.

In my opinion, most people would enjoy working at a tech company, small or large, over a similarly-sized non-tech company. 

Corporations 

Corporations include large companies with at least 1000 employees. Some benefits of working at these types of companies are that they have dedicated budgets for training, pay larger salaries, have plenty of opportunities for growth, and look great on your resume.

At large companies, however, your contributions may not be as impactful. As a developer at a large corporation, you will have a very specialized role and may start to feel like a cog in the wheel churning out lines of code. It can also be challenging to obtain an entry-level role at corporations because of their more formalized education and experience requirements. Many of them will reject candidates who don’t have an engineering or computer science degree. Your best opportunity for getting in the door is through networking with employees to get a referral, or with internal recruiters who can help expedite your interview process. If you’re given the opportunity, I highly recommend working at one of these companies when you are starting out. Even just a year of gainful employment at a large corporation will make the rest of your career and future job searches easier. In the unlikely event that you’re laid off before your one-year anniversary, chances are you’ll get a decent severance package that will support you while you look for a new role. 

Mid-sized companies 

Mid-sized companies are the most stable and conservative option and have anywhere from 100-1000 employees. They are small enough that they can better support their employees on a more individualized basis, and aren’t large enough to push for growth beyond the sustainability of the company. 

One perk of working for a mid-sized company is the flexibility they offer their employees; however, they do not usually carry the brand recognition or weight as the experience gained at a large tech company or corporation. 

Startups & Small companies 

Start-up companies usually have less than 100 employees and have only been in business for a few years, making them one of the most volatile types of companies to work for. The majority of all startups are venture-backed and are pushing hard to return a profit or grow quickly, sometimes at the expense of their employees. Startups are far more likely to either scale quickly or become acquired by a larger company. 

Another factor to consider is that some startups are just a group of self-funded co-founders making a cool product, but these are less common and generally have fewer than 20 employees. 

Personally, I worked for a self-funded startup with about twelve employees and it was one of the best decisions I made in my career. I was able to get one-on-one mentoring from someone who had been programming for decades and was very patient with all my newbie mistakes. I definitely recommend working for a startup or small company that is not just pushed to grow and keeps the well-being of its employees and stakeholders at the forefront. These companies only grow larger if it makes sense, not solely because of investor pressure. 

There are, of course, downsides to working at these types of companies. The most common one is long work hours. Startups often require non-traditional hours and lots of commitment from early employees in exchange for growth opportunities and equity. Another drawback for smaller companies concerns their finances. Sometimes their budgets are so tight that they have to wait to hire more staff or invest in more company resources, and they can be less organized if they do not have a dedicated Finance or Payroll department. One company I worked for was routinely late with paychecks because of an overworked boss who let it slip his mind. If you’re the kind of person who wants routine hours and a stable environment, this might not be for you. 

Because of their size, there are many opportunities to take on responsibilities outside of your everyday role. This can be a great opportunity to learn what you like and get extra experience, but it can also lead to more stress and longer work hours. Make sure you are upfront during the interviewing and onboarding processes regarding the hours you are willing to work and any accommodations you might need.

If you’re considering working for a small company or startup, oftentimes open positions aren’t posted on online job boards. One reason for this could be because they may not have the budget for Human Resources personnel, or they don’t want to pay to advertise on job sites like LinkedIn or Glassdoor. This is an instance where networking and keeping up with industry trends becomes just as important as having a killer resume and the right skillset (don’t worry, we’ll cover all that later). 

Consulting agencies 

Consulting agencies vary by size, but deserve a category all their own. Most of the time, if you work for a consulting agency, you will switch projects every six months to one year and will get to work for many different bosses on a plethora of technologies.Reputable consulting companies will let you change projects when you start to feel bored or burned out, which is great if you’re a lifelong learner. For some personalities though, it is more stressful to have to frequently onboard a new project and tech stack within a relatively short timeframe. Before considering this option, so you should do some research on the agency and industry to see if it’s right for you. There are two main types of work you will do at a consulting agency: staff augmentation and outsourced projects. Here are some details about each one: 1. Staff Augmentation In most cases, you’ll work with a team of internal employees onsite at a software company, or a company that specializes in an- other product but has some programmers on staff. In the latter case, because you’ll be working alongside a company’s employees, they will usually be stricter in enforcing rules like adhering to a certain dress code or set schedule. Another thing to keep in mind when working for a third-party company as a consultant or contractor is that even though you may be doing some of the same job duties as a regular employee, the company you are doing the work for has no legal obligation to offer you the same benefits as someone who is a direct hire. This means that you might not be able to take part in the same activities that everyone else on the team does, like participate in company sports or group activities or attend certain training opportunities. This type of work environment can become isolating but know that there’s almost always another opportunity to go work for a dif- ferent client and team, minus the awkward goodbyes and separation paperwork. 2. Outsourced Projects Generally, this will entail working internally with other employees of your consulting agency and is preferable to staff augmen- tation because you’re working directly for your employer without the middleman. Your client will be whatever company hired you to build or update their app, and you’ll usually be placed with senior developers that you can learn from and can show you the ropes.  Types of Developer Jobs There are a few different types of jobs available to developers, and it is a good idea to know a little bit about each so you can set your goals appropriately. Internal employee Full-time or part-time employment is the most common type of job you will be searching for.In the United States, this is known as a “W-2” or “regular” employee, meaning you are hired directly by the company and they are responsible for paying taxes and pro- viding benefits like health insurance, paid time off, and retirement plan options Keep in mind that if you’re searching for part-time work, you may not be eligible for the same benefits as a full-time employee. On average, it costs a company around $30,000 to hire a developer, so the company has an interest in keeping you happy. Perks of being an internal employee include mentorship, free training or conferences, and opportunities for professional growth. If you make a mistake or need some extra help, most companies will do their best to support you, making direct hire roles much more se- cure than being a contractor or outside consultant. Even though these jobs offer a lot of stability, they can become monotonous, especially if you’re not given a lot of autonomy in making decisions. The tech stack that you start with is likely the one you will work in for the foreseeable future at the company. If you find you are getting bored or burnt out, you may be able to fix the problem by talking to your supervisor and asking for more re- sponsibilities outside of your current role or potentially transferring to another team or project. If it still does not improve, you can seek other opportunities elsewhere after your first year of experience. Consultant Generally, consultants are viewed as industry experts with a wealth of experience in a certain profession or industry, but this out- look is not necessarily true anymore. Anyone who is hired by a company to solve a specific problem or fill a need can be called a con- sultant, regardless of your years of experience. If you are freelancing on your own or working for an agency as a subcontractor, you can call yourself a ”software consultant”; which sounds much better on your resume than a ”freelancer.” Contractor While it may be tempting to work for yourself, being a contractor is not for everyone. Contract work can be less stable, and you will have to pay self-employment taxes and continuously sell yourself and your skill set to keep getting projects. You will spend extra time keeping track of hours and billing clients, and it is likely no one will be there to mentor you as they are expecting a certain level of expertise right away. If you need flexibility and don’t mind the extra time spent on administrative tasks and relationship-building, this might be the right choice. You can take only the projects that you want, and if you happen to work with a client or project that was not particularly enjoyable, you can choose not to work with them again. Contracting work is especially good if you are becoming an expert in some- thing that has a large demand and you really like doing it (like building iOS or Android apps or cloud development).  Software Verticals Lastly, I want to give you an overview of the main types of software development that you might want to work in. This will also give you an idea of keywords that you can look for when researching job postings. •Web Development – Front-End: Do you already have an eye for design and want to learn development? Front-end posi- tions may be a good place to start. In these roles, you will primarily focus on the user experience and design aspects of the platform, working primarily in browsers using languages like HTML/CSS and JavaScript to build user interfaces. There is some overlap between UX design and front-end development. •Web Development – Back-End: Are you more interested in the logic of an application than the user interface? For back- end development, you will work directly in the code, and not a browser or emulator. You will also need to pick up some related skills like SQL/NoSQL and the Linux Command Line. •Full-Stack Development: Do you enjoy elements of both the front- and back-end development? Full-Stack, or “web development” means that you know, enough to be functional on a team in both areas. From experience, most of the jobs requiring full-stack skills are mostly front-end-focused, with some light back-end work. •User Interface/User Experience (UI/UX): UX/UI developers are sometimes also called web designers, and work almost exclusively in front-end development. Many companies confuse these terms when they are trying to hire developers with this skill set, and their roles usually include non-technical components like doing research and having a funda- mental, yet iterative, understanding the customer’s psychology to help cultivate the user experience. •Wordpress Development: It is easier to get a job doing this type of work than some other development roles, but it will usually lower-paying and will not leave you with the most in-demand developer skillset. However, if the right oppor- tunity arises, it can still be a good entry-level job for getting started in the industry. •Cloud Engineer: If you get certified by one of the top platforms like Amazon Web Services, Google Cloud, or Microsoft Azure, you can get lots of great jobs working on the cloud. This type of job is much like a development role where you have to solve problems and manage software applications, but takes place on the infrastructure side, meaning most of the code you write will be for deployment scripts and managing resources instead of building applications. •Embedded Systems and Desktop Applications: These positions require lower level knowledge about computer lan- guages and hardware, which can be harder to learn when you are starting out. •Native or Cross-Platform Mobile Development: These roles are similar to front-end mobile development, but are exclu- sively for phones and tablets. You will probably pick either iOS or Android to specialize in or focus on making cross- platform apps that work across devices. •Database Administrator: These jobs involve managing and optimizing database interactions. This is a well-paying posi- tion that can also be a good entry point for a developer position. Many companies would love to hire a developer with strong database skills. •Quality Assurance (QA): QA pros are basically professional software testers. Depending on the company, you may write tests in code or spend much of your time clicking around a user interface and handling tickets. This can be a good entry position to lead up to getting a developer job because they generally have a lower barrier to entry, but they also pay less. •Cutting edge industries: Working in a specialized industry like IoT, Artificial Intelligence, Machine Learning, Blockchain, or self-driving cars require higher levels of math and development experience, making them more difficult to get into initially. •Gaming: There are many types of companies that build games: large game companies, mobile gaming, indy companies, etc. While not all gaming-focused companies do this, this industry has a bad reputation of mistreating their employees with long hours and high stress for low pay. Some people want to work in a specific field or industry and others love building a certain type of software. The type of job you want might change as you go so do not worry about picking one just yet. We will discuss choosing a vertical a little later in the book. Let’s move on to some frequently asked questions.  What Language Should I Learn First? Before you choose a language, set some goals and do your research. We will cover language selection in a few chapters.  Should I Specialize or Be a Generalist? I hear this question often, and unfortunately, the answer isn’t black and white. If your goal is to find a job as quickly as possible, you have to be flexible enough to pick up whatever new technologies an employer might use. On the other hand, if your skill set is too broad, you will not have anything of substance to show off in your portfolio and employers might view you as too junior to be hirable. What I recommend is Specialize in one language and a few frameworks (one or two) and tools to go along with that language, and Generalize in the ecosystem that you are working in (e.g. web development). Why use this approach? From my experience, putting these recommendations into practice allows you specialize enough to be able to build robust applications in your chosen language and ecosystem, resulting in a more impressive portfolio. It also gives you confidence in your coding abilities, making you appear more professional on job applications and in interviews. Companies will see you have practiced and developed your skills in one language enough to achieve some level of mastery. Having deep knowledge of one language is much better than shallow knowledge of several. Should you specialize in frameworks and tools as well? Yes, pick a few of each and stick with them. Ideally, when you are starting out, you will pick the most popular ones so you will be able to have a large community to help you if you get stuck and need help. Knowing at least one popular framework can really help you later on when you are looking for a job as well. Being a generalist in the ecosystem means that you will be staying up to date on all of the developments and new things hap- pening around you, like innovations in web development, mobile development, or IoT. You specifically want shallow knowledge here for the purpose of gaining a broader perspective of advancements in your field without wasting time or feeling burned out (this happens a lot with the pace of change in technology). Knowing your ecosystem well is essential to becoming an expert, and also looks great when you are in job interviews. You do not have to know how to implement the latest and greatest tech trends, you just have to know how to talk about them. I give some recommendations later in this book about staying up to date with the tech world.  What if I Need to Learn a Different Language or Ecosystem for a Job? Once you know how to program, you can become proficient in any language with just a few weeks of full-time, focused study. In the event that you do need to learn a new language for a job, that’s okay, go ahead and apply. When you are interviewing for specific jobs that do not fit perfectly in your chosen tech stack, spend a few hours going through tutorials and learn a little bit about what they are using, enough that you are able to pick out some keywords and concepts while you are interviewing with them. If you do not get that job, go back to your regular curriculum and tech stack as soon as possible. Whatever you do, do not fall into the trap of thinking that the specific language language you are studying is better than another language, or look down on another style of development. Programming languages are just tools for building applications. If you learned JavaScript and a company wants to hire you to program in Python or PHP, you should seriously consider the job anyway. If you learned one language, you will already be ahead of the curve on learning another. You will almost certainly be programming with a new tool or in a new way when you take a job, and rather than be intimidated by it, try to embrace it embrace it as a new chal- lenge. The only caveat I would say here is make sure you aren’t getting in over your head. If you enjoy design and desire to work in front-end web development, but then are offered a back-end position, ask yourself if you are okay with putting in the extra effort of studying and doing that for at least one year. Getting your first job is difficult, so while you must be flexible, you also have to be hon- est with yourself about your personal needs and capabilities. Specialize as much as you can in order to become proficient in a language and set of tools while you are learning. Try to under- stand underlying programming concepts and patterns as you are studying. This will help you generalize as needed when you are looking for a job. Do not be afraid to venture into new languages when a company shows interest in you. Additional FAQs can be found in my Discord chat: https://discord.gg/FYbdFHq.  Beginning is Great The beginning is the most important part of the work.” Plato, The Republic The goal of this book is to make you hirable as soon as possible. Once you get hired, you will have plenty of time and support to develop your skills on the job. Most tech jobs do not require a degree or deep knowledge of math or computer science, they just want to see a baseline level of technical ability and your desire to continue to learn. You can demonstrate all of this by building out a port- folio. When launching a product, the goal is always to get to the minimum viable product (MVP) state as soon as possible. This allows much more leeway for iteration and making tweaks to the product as it develops. It’s the same with learning to code. Start coding as soon as possible! Don’t spend too much time researching or learning theory, jump in and learn as you go. If you wait too long, you are probably going to procrastinate and/or burn out. If you get stuck, it is a good sign that you are pushing your- self. Stay focused on the end goal where you are paid well to learn and challenge yourself every day!