When I first got started as a software developer, I had no idea what I was doing.\n\nI was also frustrated. Nothing seemed to make sense, and I didn’t think I’d ever “get it.”\n\nThe reason I’m telling you this is that if you have pick up my book, you might feel that exact same way.\n\nDon’t worry, this is normal. In fact, it’s natural.\n\nWhen you first get started in the field of software development, if you don’t feel overwhelmed and like you just jumped into the deep end of a pool with weights tied to your ankles, you are probably either doing something wrong, or you aren’t human—maybe both.\n\nAnyway, you should expect it to be difficult and confusing starting out, but it’s not always going to be that way—I promise.\n\n
How I Started Out
\n\n
Learning About the Profession
\n\nFirst of all, you need to know something about developing software.\n\nIt’s both easier and harder than you think.\n\nA whole section of this book is dedicated to the idea of “What You Need to Know About Software Development,” but I’m going to give you a quick overview here.\n\nSoftware development isn’t just programming. Programming is a large part of it, but just knowing how to code isn’t going to take you very far—especially if you want to make a career out of this vocation.
\n\nThe idea behind most software development projects is to automate something that is currently manually done in the world, or to create a new automated way to do something that was too difficult to do manually.\n\nThink about the word processing software I’m using right now. I happen to be typing this post using Google Docs.\n\nWithout Google Docs or other word processing programs, I’d have to either type this document on a typewriter or hand write it.\n\nIf I wanted to format the document to print it, I’d have to manually typeset the letters to be printed.\n\nIf I wanted to fix mistakes—especially spelling errors—I’d need to keep a bottle of whiteout nearby. (And probably a bottle of whiskey as well.)\n\nNow it’s not just Google Docs allowing me to do all this. There are a bunch of hardware and software programs involved that allow me to take the manual process of typing or handwriting a book and automate it, but I think you get the point.\n\nTherefore, let me emphasis to you a key concept that you should learn as early as possible as you embark on this journey to be a codeslinger.\n\nYou have to be able to manually do something before you can automate it.\n\n
Gathering Requirements
\n\nToo many aspiring—and experienced—software developers try to write software without fully understanding what it is supposed to do. They want to just jump right in and code.\n\nObviously, you are smarter than that, since you are reading this book.\n\nThe process of software development always begins by first understanding the problem to be solved. What are you automating?\n\nDifferent software development methodologies do this in different ways, but that’s not important to focus on right now. Right now, the point is that you have to, in some way, gather some kind of requirements and understanding of the problem being solved before you can write any code.\n\nThis might be as simple as talking with a potential customer and discussing what needs to be built and how it should function, or it could be as formal a creating a fully documented specification.\n\n
Design
\n\nOnce you achieve that understanding, you then come up with some kind of design of how that problem is going to be solved in code—again, before any code is written.\n\nThink of this as the architectural blueprint for your code. Once again, different software development methodologies handle this in many different ways, but what is important is that you have some level of design before you jump in and start coding.\n\nThis applies at the large scale and the small scale. Some developers that learn about Agile software development (we’ll talk about that in a later chapter) think they don’t need to design anything, that they can just start coding right away. While Agile development focuses on less up front design, design is still necessary.\n\nYou don’t build a house by randomly just nailing two-by-fours together.\n\n
Writing the Code
\n\n
\n\nOnce you have some idea of the design of the software, it will be time to either write some tests that will define what the software is supposed to do (also known as Test Driven Development or TDD), or it will be time to get started coding. (We’ll discuss TDD more in later chapters.)\n\nWriting code is a discipline in itself, so we won’t be getting into that here, but I’ll recommend two great books on writing good code that you should definitely read.\n\nFirst, I recommend Code Complete by Steve McConnell. This is a classic book every software developer should read.\n\nThe second is Clean Code by Robert Martin, another classic book which will help you learn to write better code.\n\nThese books will help you learn how to structure your code and how to write code that is easy to understand and maintain.\n\nBoth of these books had a profound impact on my coding skills, especially in regards to clarity and design.\n\n
Testing and Deployment
\n\nSo, once code is written, we ship it, right?\n\nWrong. Now comes the process of testing the code. Again, different methodologies are going to handle this in different ways, but in general, some kind of testing has to happen before the code is released to the end user.\n\nFor example in traditional, waterfall development projects, testing happens at the very end of a project, but in “agile” projects, testing happens during each iteration, which usually last about 2 weeks.\n\nOnce code is tested, it’s ready for deployment, which may be a whole process in itself.\n\nWe don’t get into the details just yet—there will be a whole chapter on this topic—but deployment is the process of getting the finished software installed on a server, put into an app store, or made accessible in some other way to the users of that software. (And that process can be quite complex.)\n\nAlong the way, code may—ahem, should definitely—be checked into source code repositories where different versions of the code and the changes over time are stored.\n\nIn most complex applications that deal with any kind of volume and data, there is also likely to be some kind of a database involved.\n\nThe database typically will store user data for the application or configuration information and it may also need to be updated along with the source code.\n\nMany software development teams use some form of continuous integration to build the code automatically when developers “check in” parts of it.\n\n
More to Writing Code Than Just Writing Code
\n\n
\n\nAnd finally, let’s not forget debugging. As a developer, a large amount of your time is going to be spent figuring out why your code—or someone else’s—doesn’t work.\n\nAs you can see, there is a lot more to software development than just writing code.\n\nYou’ll need to be aware of all of this stuff before you can get a real job as a software developer. Hopefully, you’ll have at least some experience and skills in a few of these other proficiencies as well.\n\nBut fear not. The purpose of this book is to prepare you for all that—or at least spin you around and point you in the right direction. You might need to fill up the backpack with all the supplies you need for yourself, but I’ll at least tell you what to pack.\n\n
Having a Plan
\n\nOk, John, I get that software development is more than just writing code and that I’m going to spend a lot of time debugging things, but you still haven’t told me how to get started. What gives?\n\nAh, yes. I see your point, but guess what? Here is the good news:\n\n
You’ve already gotten started. Congratulations.
\n\nBy picking up a book, like this one, and actually trying to understand that software development is much more than just writing code, you have a better start than most software developers will ever have.\n\nOk, yes, yes, I know that was a bit of feel-good fluff, but it’s honestly true as well. Someday when you get to be a grouchy old software developer like me, you’ll be preaching the same thing.\n\nNow, on the more practical side… you need a plan.\n\nYes, a plan. A real, actual, no-BS plan for how you are going to go from knowing nothing or next to nothing about software development to a full-fledged software developer.\n\nThere are many roads you can take to get there—I’ll be covering some of them in the upcoming chapters—but what’s important isn’t so much what road you take but rather that you pick a road and stick to it.\n\n
Putting Together the Plan
\n\nLet’s talk about what your plan should entail.\n\nFirst of all, you need an honest assessment of where you are right now and what things you are going to need to learn.\n\nDo you have any programming experience?\n\nDo you know any programming languages?\n\nHave you ever built an application, or are you starting completely from the beginning?\n\nWhat about all these other skills I talked about earlier?\n\nDo you have any of them?\n\nDo you know anything about databases, source control, TDD, testing, debugging, or software development methodologies?\n\nAlso, ask yourself what kind of software development you want to do.\n\nSure, everyone wants to be a game developer, but is that practical? And is that where you want to start? Are you willing to put in the long hours and fight with all the competition you’ll face going down that long and lonely road?\n\nSo many people set off in a direction in life but don’t think things completely through first.\n\nTake some time to answer these questions, so you’ll be able to come up with a good plan for getting started.\n\nDon’t get me wrong. I’m going to help you as much as possible in this book, but I can only take you so far.\n\nI can give you all the information you need to become a good, even great software developer, but you are going to have to organize it into an action plan that is tailored to you. And then you are going to have to follow it.\n\n
Creating the Plan
\n\nOnce you’ve thought about these questions for a bit, it will be time to develop an actual plan.\n\nThe best way to develop your plan is to work backwards from the goal you want to achieve.\n\nRather than “learning to program” or “becoming a software developer,” you should come up with a specific goal of the kind of software developer you want to be.\n\nIn the “What You Need to Know About Software Development” section of this book, I’ll be covering the different kinds of software development roles or jobs you might want to consider, but you can also do some research on your own to determine what best fits you.\n\nYou want to be as specific as possible, so that you can know exactly what it is you need to learn, how you want to craft your resume and portfolio, what schools or programs you might want to enroll in, and even what jobs you want to apply for.\n\nI know it’s difficult to make a decision and make a commitment, but I can’t stress enough just how important this is!\n\nThe more specific you are about what kind of software developer you want to become, the easier EVERYTHING is going to be.\n\nYou’ll be able to clearly know what it is you need to learn and what you need to do for every step of the way.\n\n
Who Wants to Be an “Athlete?”
\n\nThink of it this way: suppose you wanted to be an “athlete.”\n\nThat is pretty dang broad. How should you train to be an “athlete?”\n\nMaybe you should lift weights and run, but maybe you should practice swimming. Maybe you should hit a ball with a tennis racket.\n\nBetter do all those things and more, so you are prepared for any sport that you might end up getting on a team to play.\n\nSee how ridiculous that sounds?\n\nThat is how ridiculous—in fact even more so—it sounds when someone expects to be a “software developer.”\n\nInstead, pick your sport.\n\nOnce you know the sport, you can know how to train for that sport and that will make your life much easier—trust me.\n\nStart with the goal and works backwards to determine what you need to know and do in order to reach that goal.\n\nOnce you’ve done that, you can work out your plan.\n\nThe beginning of your plan should be all about what you need to learn. Figuring out the order of what you need to learn and how you are going to learn it is important.\n\nThen, you should be figuring out what you will need to do to prepare for getting your first job and applying for jobs.\n\nFinally, you need an actual plan for getting the job. Where are you going to look? What are you going to do? What kinds of jobs are you going to apply for?\n\nI’d probably also add a plan for how you are going to continue your personal development and education after getting your first job.\n\nA little overwhelming, I know, but don’t worry. The reason I wrote this book is to make all that easier for you.\n\nIn the next few chapters, I’ll be helping you figure out what you need to know and how to gain that knowledge, and in the following sections, I’m going to give you the details about how to get a job.\n\nFor now, you can start thinking about what your plan is going to look like, and try to figure out what kind of developer you want to become.\n\n
A Concrete Example
\n\n
\n\nI always find real examples useful, so let’s look at a realistic scenario for someone who wants to become a web developer utilizing Node.js as their primary technology:\n\n
Goal: become a Node.js developer.
\n\n
Plan:
\n\nLearning\n\n
- \n
- Learn the basics of JavaScript.
- Learn about web pages and web development technologies like HTML and CSS.
- Learn the basics of Node.js.
- Be able to write some kind of simple Node.js web application.
- Learn about the different frameworks and technologies developers use to develop Node.js applications.
\n
\n
\n
\n
\n
\n\n
TO-DO:
\n\n
- \n
- Fill in some frameworks or technologies to use with Node.js from research above.
- Learn some kind of database technology to use with Node.js.
- Learn computer science basics:\n
- \n
- Algorithms.
- Data structures.
\n
\n
\n
- Learn best practices for writing good code.
- Learn how to design the architecture of a Node.js app.
\n
\n
\n
\n
\n
\n\nPreparing for Getting a Job\n\n
- \n
- Start looking at job descriptions for a Node.js developer in my area and find out what skills employers want.
- Come up with a list of companies, locally, that I can likely get a job at.
- Start attending user groups in the area.
- Start networking with other local Node.js developers.
- Hire a resume writer to help me write a good resume.
- Practice coding interview questions.
- Practice mock interviews.
- Build a portfolio of a few apps to demo.
\n
\n
\n
\n
\n
\n
\n
\n
\n\nGetting a Job\n\n
- \n
- Contact all the people in my networks to let them know what value I can provide and what I am looking for.
- Start applying for junior-level jobs or internship programs.
- Plan to apply for at least two jobs each day.
- Debrief with yourself after interview and decide what skills need to be worked on.
\n
\n
\n
\n
\n\nThis is still a fairly rough sketch of a plan, but you can see how this kind of plan gives a clear path getting you from A to B.\n\nYour plan will be rough at first, but as you figure out more about what you need to learn and do, you can fill in more details.\n\nHaving some kind of plan in place is important. You can always change and adapt the plan, but if you don’t have a plan to begin with, you’ll be aimlessly floating in random directions and will probably get frustrated and be more likely to give up.\n\nIn the next chapter, I’ll help you refine that plan further as we discuss the technical skills that you are going to need in order to become a software developer.\n\nWhile you’re cracking away at your plan, do check out my course: 10 Steps to Learn Anything Quickly\n\n
