ch1.pdf - Web Development
Document Details
Uploaded by Deleted User
Tags
Summary
This document introduces the field of web development, explaining what a web developer does and the skills involved in the role. It discusses the importance of logical thinking and problem-solving.
Full Transcript
1 So, You Want to Be a Web Developer, eh? Facebook. Wikipedia. CNN. Reddit. Ars Technica. Amazon. Instagram. ESPN. YouTube. Google. The web really has eaten the world, hasn’t it? Millions of people visit millions of websit...
1 So, You Want to Be a Web Developer, eh? Facebook. Wikipedia. CNN. Reddit. Ars Technica. Amazon. Instagram. ESPN. YouTube. Google. The web really has eaten the world, hasn’t it? Millions of people visit millions of websites every day. Some to play games, some to see what’s going on in the world, others to let us know what they’re up to (and what their cats are up to!), and others to have conversations with the world on all sorts of topics. Banking, medicine, agriculture, society, parenting, exercise, food, and culture – virtually every industry and every interest you can think of has representation in this giant maze of websites. But who makes these digital places we all (virtually) hang out in now? Who manipulates the technology that underpins it all to create the next great website? Well, if you are here reading this book, then guess what? You’ve taken your first step toward the answer being you! There are a great many more steps on that journey beyond this book, to be sure, but as they say: a journey of a thousand miles begins with a single step. The goal of this book is to give you a roadmap detailing the steps to take to become a web developer (whatever that is – we’ll get to that!). At the same time, it will give you the first layers of a foundation in the technology you will need to understand to succeed in that journey. Make no mistake: this book will not teach you everything you need to know on a technical level – a single book could never do that – but by the time you reach the end, you’ll have the start of that knowledge in your brain, and you’ll have a clear picture of the next hill you should climb. In this chapter, the essential goal is to give you an understanding of what a web developer is and what it takes to be one. Understanding this is, of course, key to your entire journey, because it wouldn’t make much sense to pursue a career you didn’t truly understand, would it? And, especially in a field where there can be a wide variety of definitions even for seemingly simple things, it’s important to have that foundational knowledge. 4 So, You Want to Be a Web Developer, eh? So, in this chapter, we will cover the following topics: What even IS a web developer? What does it take to be a web developer of varying types? What are the types of tasks a web developer might perform on a daily basis? What does a typical day on the job look like for a web developer? What even IS a web developer?! When we ask the question “What is a web developer?” the obvious answer is someone who develops websites. But that answer is reductive and it doesn’t really begin to cover it all. Also, there really is no single, accepted definition, but there are many variations on the theme. If you were to ask me – and you kind of have done, by reading this book! – my answer would be that a web developer is a programmer, a coder, or a software developer. All these terms are basically interchangeable, and they simply refer to someone who creates computer software, of which a website is a type. The one true unifying principle, whether we’re talking about web development or another type of software development, is that you must be able to think logically, which translates to being able to write instructions (AKA code) that the computer will follow in order to produce a website in a web browser. Basically, web development is a form of software engineering, though not all software engineering is web development (because not all software runs on the web) – so, you’re really on a journey to becoming a software engineer, one whose software just so happens to run on the web. But it’s not all about writing code! A web developer also has to be a graphic artist. They have to be a usability expert. They have to be a business analyst. They have to be a writer and a copy editor. They have to be network engineers. And they have to be so much more. They must be a jack of all trades, in other words. The job is not just writing code; there’s much more to it, and we’ll get into it all as we move forward. This brings up a point that you will sometimes hear from those not as familiar with what’s involved in being a web developer: they say that web development is somehow easier than other kinds of software development. Well, let me dissuade you from that notion right now because it couldn’t be further from the truth. In fact, while it certainly isn’t true all the time, a strong argument can be made that web development is frequently harder than non-web development, just because of all that‘s involved, some of which is unique to web development (or, at least, is of larger concern than in non-web development). Here, I’m referring to things such as networking, since the web inherently operates over networks whereas not all software does, and the fact that in web development, you as the developer aren’t really in control of the runtime environment. For example, a user can resize their browser window however they want or change the zoom or font of a web page, and your code has to adapt and handle those decisions (this can be true to some extent in desktop development too, but it’s a much larger concern in web development). What even IS a web developer?! 5 With all that said, let me assuage any fear that might be rising in your mind: while there is indeed a lot to learn, the simple fact is that web development starts from some relatively basic concepts and builds from there. Plus, there is absolutely no need to learn everything all at once. No, you can be an exceptionally good web developer without knowing everything you “need” to learn at any given moment in time. This is a field where learning to learn is a key requirement, and being able to learn as you go and figure things out piece by piece is critical. In truth, there is simply no way one person ever could know everything out there, a fact you will understand quite well by the time you finish this book. In other words: you will get there, no matter how daunting it may seem, I promise! Let‘s go a little bit deeper in terms of what it means to be a web developer and what it looks like from a process perspective to build a website, at least at a very high level. Digging deeper into being a web developer and building websites In general, it all starts with stakeholders or clients – essentially, the people you are creating a website for. Of course, that stakeholder could also be you yourself. Either way, someone somewhere has some idea for a website. This website could be what we call a brochureware site (or “brochure website”), which is a site that is more or less just static (unchanging) content. Have you ever checked out the website for your favorite local pizza joint? Chances are, it isn’t much more than some information about the restaurant, a menu, and some contact information to use to place an order (some will have online ordering, of course, but let’s assume your local place isn’t fancy enough to have that). Sites such as that would generally be considered brochureware because they, in a sense, are a digital version of a company’s marketing brochure. They, for the most part, aren’t interactive; their goal is simply to convey information to you. 6 So, You Want to Be a Web Developer, eh? My own personal website at zammetti.com, as shown in Figure 1.1, would be an example of such a brochureware site. It doesn’t do much other than convey information about me, and that’s the point: Figure 1.1: A simple brochureware website – my own! However, the client might instead have a grand idea for the next Twitter (or X, as it’s known these days), or maybe Gmail or Bing. These are vastly different from brochureware sites in the sense that they are highly interactive, meaning they perform functions for their visitors. They are meant to get things done. These types of websites are generally referred to as web apps. It’s a subtle difference, and the line between them can get very blurry. But as a general guideline, if a website is very interactive and can perform functions at the user’s behest, then chances are, it’s a web app. Saying that, it’s important to remember that a web app is still a website. Either way, the stakeholder has that vision, and your first job as a web developer is to listen to them and gain an understanding of what they’re trying to achieve. That may sound easy, but trust me, it’s not always the case! Often, the idea will be very vague, and/or they won’t be able to express it clearly, and they’ll be counting on you to interpret their words. In essence, you need to figure out what’s in their heads when, sometimes, even they don’t really know! What even IS a web developer?! 7 You will need to then take that understanding and map it to a technical solution – that is, actually build a website. This process will very often be iterative, meaning you’ll build something, show it to the stakeholder, get feedback, and then make changes, going through that cycle several times. This is very typical and there is absolutely nothing wrong with it. I would go so far as to say that not doing that will be the rare exception. But what do you actually build at that point? Well, it may surprise you to learn that, very often, you won’t be writing any code or doing any programming straight away. Instead, the first step is often to create what we call “low-fidelity mock-ups.” Or, to put it more simply: drawings! If you’re an artistic type, you might draw these by hand, but if you’re like me – someone who couldn’t draw a straight line to save his life – you’ll seek out tools built expressly for this purpose. There are many options here, such as Canva and Figma. Even Adobe Photoshop – a graphics editing program – is often used for this purpose. Another tool that is quite popular, which happens to be my favorite, is Balsamiq Wireframes. With it, you can produce illustrations such as what you see in Figure 1.2: Figure 1.2: An example of a pizza place’s website created with Balsamiq Wireframes 8 So, You Want to Be a Web Developer, eh? Notice how in that mock-up – which is what we call this kind of low-fidelity diagram – things aren’t quite lined up, and there’s no actual text in the middle there, just some filler to say that text will be there? At this point, you really aren’t concerned with things such as colors, layout, font choices, detailed text, graphics, and other things that make a website complete. All you’re trying to do is nail down the overall structure, make sure you understand what the client wants at a high level, and show it in a form they can understand, so they can reply with “Yes, you got it!” or “Nope, back to the drawing board” (though you’re hoping for something in-between, such as “Okay, it’s close, we just need to tweak these one or two fairly minor things”). The next phase is usually prototyping, sometimes called proof of concept (though that tends to only apply to interactive sites since the idea is to prove out functionality). This normally will involve actual development and actual programming, but done in a very quick-and-dirty way. In fact, it will often be the case that you will throw away some percentage of the work that you do in this phase. You still aren’t necessarily going for perfection here, but for sure, you need to get into more of the details. For example, what should be seen when the user clicks the “Order form here” button? At the mock-up stage, you might hand a second mock-up diagram to the client that doesn’t say much more than “the order form will appear when the button is clicked.” But, at the prototype stage, you’ll need to build that order form screen to some degree. It still doesn’t need to be 100% complete in terms of styling or functionality, but you have to begin to make an actual order form and make it begin to look and appear to work as it will for real. In this phase, user interactions are typically “dummied up,” meaning that they’re faked, but in a way that makes them look real to the client so they can get a feel for how things will work. If you need to be able to add pizza and other food items to a shopping cart, for example, there are ways to build that quickly and cheaply, ways that will let the client actually experience the ordering process, but without investing all the time and effort into truly building that functionality for real, which takes much more time and effort. Once they get their hands on it – and you will most probably go through a few more cycles of iteration – only then is it time to get down to building the website for real. This is the point where you’ll start writing code that actually works in its true, final form. You’ll need to start gathering graphics, possibly creating them from scratch, and getting the layout solid in terms of alignment, colors, fonts, and all the styling that goes into a web page. You’ll need to write the code for things such as order forms to make them really work, which may or may not include writing code on the server as well (we’ll get into that more later). All of the ideas that went into the mock-ups and the prototype in a rough form just to express the ideas to the stakeholders now have to be solidified into a real product. It’s quite an adventure to go from an idea, sometimes a very nebulous idea, to a full-blown website, whether it’s a brochureware site or a full-fledged web app. It takes a lot of time, a lot of patience sometimes, and an ability to fine-tune things little by little. You’re molding clay into a beautiful vase, in essence. It’s not always easy; sometimes the tower of clay even collapses and you have to start again, but that’s the job of a web developer, in a nutshell! How in demand are web developers? 9 At this point, I want to once more reiterate my earlier point that while this may all seem overwhelming, you shouldn’t fear it! We’ll take one step after another together and build the foundation you need. All we’re doing here is looking at things from 10,000 feet up and there is no expectation that you know everything, and that will pretty much always be the case as you work in this field. That said, I’m hoping you think that all sounds pretty interesting! But being interesting is just one part of it – what about the job market? Are web developers actually in demand? Well, let’s find out! How in demand are web developers? If you go online these days, you’ll see some debate about whether web development – and indeed software development more generally – is in danger. So, are we still in demand? Will we continue to be, once artificial intelligence has its way with us? Will ChatGPT and its competitors do what we do in a fraction of the time and for a fraction of the cost? There’s a lot of doom and gloom going on along those lines for sure, so it’s a legitimate question to ask. We can certainly debate that question all day long, and plenty of people do. If you want my opinion, it’s simple: AI isn’t going to take our jobs. What it will do, though, is be an indispensable tool that all web developers will have to use. But I’m getting ahead of myself here, and we’ll be talking about AI tools later in this book. For now, the simple answer is that yes, web developers are absolutely in demand right now, and I don’t think there’s much danger of that changing over the next 10-20 years at least (probably even a lot longer than that). The job will morph a bit over time for sure, just because software development always does anyway (it’s an extremely rapidly changing field), but if you’re willing to keep up, I don’t think you need to be worried about not being in demand. 10 So, You Want to Be a Web Developer, eh? In fact, if you want some hard figures to back that assertion up, have a look at Figure 1.3, which is a screenshot of the U.S. Bureau of Labor Statistics’ Occupational Outlook Handbook page discussing web developers (https://www.bls.gov/ooh/computer-and-information-technology/ web-developers.htm): Figure 1.3: The U.S. Bureau of Labor Statistics’ Occupational Outlook Handbook page discussing web developers How in demand are web developers? 11 What you’ll find on the BLS site is that the employment opportunities for web developers are projected to grow by 16% between 2022 and 2032 (as of writing – the number could change by the time you read this). What’s interesting is that the projected growth was 13% two years ago, so this tells us that demand is increasing, which is great news for anyone entering the field. In fact, that projected growth outpaces virtually every other field there is. So, yeah, to say we’re in demand is probably an understatement! This demand is fueled primarily by e-commerce sites and mobile development. What are those? Well, an e-commerce site, where e is short for electronic, is a website where people buy and sell stuff or do other things that are generally considered “commerce.” Amazon and eBay may be the most well- known e-commerce sites, but your bank’s website is also one, and even that local pizza joint’s site you looked at earlier might be. An e-commerce site is generally more about conducting business, so the pizza place’s website would be an e-commerce site if you can order food from it; however, if it’s just talking about the restaurant, then it’s probably a brochureware site (the dividing line can be blurry sometimes). Either way, since commerce is all about businesses, and businesses kind of rule the world (whether that’s a good thing or not), you can see why the demand is only increasing. It’s not only about e-commerce sites, of course. Social media is another huge category where there is plenty of work to be found, and there are of course many other categories of websites. But regardless of the type of site it is, it very often comes down to businesses behind them, or other types of organizations (non-profits, governments, etc.). As these entities continue to prioritize their online presence over non-internet presence (because people now expect to conduct their lives on the internet by and large), that demand trend line will just continue to go up and up. Mobile development is a whole other category, but the fact is that a lot of mobile development these days is also web development. You know the apps you run on your iPhone or Samsung Galaxy phone? Many of them are what we call “native” apps, meaning they are programmed to run on those specific platforms. However many of them use the same web technologies as are used to build websites, and that trend is likely to grow. Creating websites, or web apps, for mobile devices comes with unique challenges, but the skillset is the same, so growth there means growth in web development as well. In fact, for much of the world, websites are more frequently accessed with mobile devices than typical desktop machines (and laptops are a little bit of a gray area, though they tend to be more like desktop machines than mobile smartphones). Web development is often done in a “mobile first” way, meaning you make your website look and function correctly on a smartphone and then tweak it to also work well on a desktop. One thing you can see from this discussion is that web development comes in many forms, making it an expansive topic that’s only becoming more so over time. Many different disciplines are required of you as a web developer, including things such as cloud computing, cybersecurity, data analytics, search engine optimization, and much more. If you don’t know what any of this means, don’t worry – you will by the end of this book! The relevant point here, though, is that skilled web developers are becoming more valuable due to this ever-growing list of things you have to know at least something about. Once 12 So, You Want to Be a Web Developer, eh? you’ve acquired those skills, the demand for you to put them to use for someone will only grow because the ever-evolving nature of the field means your ability to learn – and being able to demonstrate that – will be your most valuable asset. Show me the money! Okay, great, I’ve convinced you that web developers are in demand and will continue to stay in demand, and we’ll probably even see that demand grow. But it also sounds kind of hard, doesn’t it? It had better be worth it, right?! Well, it is! According to that same BLS site I mentioned earlier, the median income as of May 2022 was $78,580. And I can tell you that this number is higher than it was in 2020, and it was going up for a long time before then. That ain’t bad! But it gets better! As you progress and gain experience, you won’t be at all surprised to learn that your earning potential goes up. I’ll give you a very rough progression you might see in your career based on your number of years of experience: You might start off in the $50,000-$60,000 range (though remember that all these numbers are impacted by a lot of factors, so your starting salary may be lower or indeed higher in reality) After three years, you can likely expect to be making in the $70,000-$80,000 range After five years, you’ll very likely be at or near $100,000 By the 10-year mark, you’ll almost certainly be above $100,000, probably more in the $130,000- $140,000 range, and you’ll most likely be about to, or already have, moved into a senior/lead role After 15 years, you’re probably looking at $150,000 or higher The previous figures are for non-FAANG jobs – that is, any company that isn’t considered a FAANG company. Which, of course, begs the question: what is a FAANG company?! FAANG is an acronym that stands for Facebook, Amazon, Apple, Netflix, and Google, which I’ll talk about more in Chapter 9, but the main point for now is that we’re referring to “the biggest, most high-paying Silicon Valley companies” with that term. If you earn a position at these kinds of companies, then you can expect to make way more than the numbers I’ve stated here. But whether you work at a FAANG company or not, there is a great opportunity to do well for yourself financially in this field. So, at this point, you’re salivating, right? There’s gold in them thar hills, and you just have to gain the skills needed to mine it. But let’s slow down just a bit and ask what can be a difficult – but critical – question: is this a field that’s right for you? But is a job in web development right for you? 13 But is a job in web development right for you? Have you by chance ever heard of the mantra that “anyone can code”? It’s something we like to say, and in a basic sense, it is true. There isn’t anything fundamentally unlearnable in the web development field for someone who is motivated to learn. It’s not like baseball where you have to be able to hit a 95mph fastball, or like basketball where you have to be able to make a jump shot, both of which take a lot of physical skill. And it’s not like being an astronaut where you must have perfect vision and nerves of steel to climb on and ride a giant, exploding candle into orbit! No, there aren’t any real physical requirements, natural-born talents, or innate abilities you need to possess. You can learn all you need to if you have the drive. Let’s look at some of the key characteristics a web developer will tend to need to be successful. You gotta be a puzzle master That being said, web development – and software development in general – is, in a sense, a constant exercise in puzzles. Everything you do will revolve around solving problems. How do you get the client’s logo to appear on the web page properly? How do you make their contact form send an email? How do you make the website accessible to those with disabilities? These are all problems to be solved, puzzles to be completed. Those who tend to thrive in this field have certain qualities, some inherent, but most of which can be developed over time with experience. Creativity to the max In web development, there’s also a large degree of creativity involved. There are rarely right or wrong ways to do things, rarely definitive approaches to solving problems, and rarely canonically correct answers. So, you will often have to have a creative streak in you to produce pleasing results. You’ll have to take what’s asked of you – which may be fairly general and not clearly defined sometimes – and figure out how to make it a reality, often by introducing your own creative interpretation of it. And it’s not just about what you see on the screen, where the idea of creativity and even artistry is more obviously applicable. No, there is also creativity and artistry in writing code: how do you structure it? What components do you need and how do you make them interact with each other? But while web development is a creative endeavor where you have a lot of freedom to do things your way, it’s not total anarchy! There are what we call “best practices,” which refer to solutions that have previously been applied in specific situations and have usually resulted in positive outcomes for many people. But at the end of the day, building websites is different from constructing a bridge, for example, because society has built lots of bridges, and as a result, we know how to do so every time. We know what works and what doesn’t, and so we follow tried-and-true architectural techniques when building them. While best practices give us some of that in web development, it tends to be a lot less than you might think, and that opens the door for a lot of creativity. 14 So, You Want to Be a Web Developer, eh? To put it another way: while building a bridge is surely part science and part art, in most cases, the science part will be the bigger part. In software development, and web development for sure, the opposite will usually be the case. Attention to detail for fun and profit So, a web developer must like solving problems, and they must be creative. They must also have solid attention to detail. Trust me when I tell you that there will be times when you’ll pull your hair out trying to make something work only to discover it wasn’t working because of one bad number or letter or symbol somewhere. The closer attention you pay to details, the longer it’ll take for you to go bald from pulling all your hair out! Figure 1.4: Web developers curse a lot, but always at inanimate objects Alone or in teams, it all matters Web developers must be good independent workers, as well as be able to work well with others. As I mentioned earlier, dealing with clients and stakeholders is an obvious example of working with others, but there’s a good chance you won’t be the only one developing a website. You certainly may work alone in some situations, but probably more often you’ll find that you have partners in crime. You may build one part of the site while someone else works on another part, and then you have to make it all work together. Being able to communicate, collaborate, plan, and execute in unison is a key requirement. But is a job in web development right for you? 15 Soft skills, in other words, are another key requirement for web developers. Whether in written form or in person, whether technical or not, being able to express your thoughts cogently and precisely is a skill you must master. Keeping up with the times You’ll hear this repeatedly, but learning to learn, and being comfortable with change, is one of the top skills you’ll need to master to be a web developer. This field changes at a rate that is equal parts astounding, exciting… and massively frustrating! Just when you learn a skill and feel confident with it, it may fall out of favor and be replaced by something else. This leads to a problem called “imposter syndrome,” and it’s something virtually everyone deals with. This is where you feel like an imposter, someone who doesn’t know what they’re doing, even when you do. Despite how long I’ve been doing this kind of work, it still hits me sometimes too. The constant churn of technologies gives rise to this feeling because you’re constantly in a state of having to confront new things. There’s no silver bullet to deal with imposter syndrome, unfortunately. But being able to learn on-the-fly, and proving to yourself that you can over time, is about the only way to blunt its effects somewhat. Keeping up with the changes in the field is a full-time job unto itself sometimes, and it definitely helps if you enjoy the discovery process. If you’re someone who likes learning new things and likes being out on the ragged edge sometimes, then web development will probably make you smile a lot. Rolling with the punches You have to have a thick skin to be a web developer because there will always be someone with an opinion you have to listen to and act upon. Whether that’s a client or a boss, you’ve got to be open to feedback, not take it personally, and be willing to revise your work based on what you hear. As writers like to say: you have to be willing to kill your babies. In web development, that might mean that as cool as you think the website you built looks, if the client feels otherwise, you’ve got to be willing to throw it away and start over. Finding what you need A good chunk of your time as a web developer will be spent doing things that aren’t, seemingly, web development. Sure, I’ve talked about things such as communicating with others, but here, I’m talking about research and just conceptualizing things that you’ll be building, be that the layout of a web page, the code behind it, and so on. You’d be surprised how much time web developers spend just kind of staring off into space, visualizing things! But, beyond that, you have to be able to find information and synthesize it into your thinking. You have to know where to go to get answers to all the questions you’re absolutely going to have. 16 So, You Want to Be a Web Developer, eh? Do you know how to center a div horizontally and vertically on a web page? Do you know what those words mean? No? Well, you’d better know where to go to find out! Do you know what the function signature for the React useEffect() function is? No? I hope you can find out or you’ll be in trouble! Do you have to use Vue today – which you don’t know anything about – instead of React, which you normally use? Great – you’re gonna have some research to do, aren’t you? The point of all of this is that being a web developer means having to have a lot of skills and qualities beyond just pure technical knowledge. Truly, technical skills are the easy part. If you don’t relish the challenge of all of this then the web development field might not be a good fit for you. You have to embrace the challenge, embrace the madness! If you do that, I think that, putting money aside, you’ll get a lot of enjoyment out of the feeling of accomplishment you can get from it. There’s nothing quite like the feeling of solving some problem that has been vexing you for a while and seeing something on the screen finally work. It’s gratifying. Even if what you’re building doesn’t fundamentally interest you, seeing it work for the first time feels pretty darn good! So, there is definitely reward in this field beyond the financial, but I think it’s only fair that you know what you’re getting into. There will be days where you’ll be screaming and yelling at inanimate objects for sure. You’ll feel that imposter syndrome kick in all the time and have to fight it off. Almost every day will introduce some new thing you have to take in and make use of. But if this is a challenge that excites you, then web development might be just the ticket for you! Being patient and handling failure Two other skills, so to speak, that you’ll need to be a web developer are the ability to be patient and to handle failure. You’ll need patience to research things and learn things, that’s obvious, but you’ll also need patience when building a website because it takes time to get all the details right. You’ll often have to go over things many times, tweaking them little by little, to get them just right. That dovetails into the notion of handling failure. Any time you write code, you run the risk of it not working right the first time. In fact, you can almost be guaranteed it won’t! You can let this get to you, in which case you’ll have a really bad time of it and not make good progress, or you can learn to accept that it’s just part of the process for things not to work and to have to keep working on it. You have to be kind to yourself, in a sense. You’re going to have a lot of little failures as you develop a website, and you’ll have to not beat yourself up for it because it’s part of the process. But this is a way in which web development, and really, software development generally, is unique: you can get things wrong many times and keep getting it closer and closer to right, little by little, with no real consequences. It’s not like designing a building where if you get something wrong early, the whole thing may just collapse, costing lots of time, money, and potentially lives. No, if your code doesn’t work right the first time – and again, it probably won’t – this does no real harm. Sure, it costs a little time, but that’s it. So, being patient and being able to handle failure are also key qualities for a web developer to possess, and by combining them, you get the notion of being kind to yourself. In fact, learning to not view Do you need a degree? 17 every bit of code that doesn’t work right as a failure at all is really what it’s all about. It’s simply part of the journey, each and every time, and it’s totally okay! You’ll notice one thing that I didn’t list as a quality a web developer needs, and that’s something that a lot of people entering the field wonder about: a college degree. So, let’s talk about that next! Do you need a degree? Of all the questions people have about getting into web development, whether you need to go to college and obtain a college degree – usually a Computer Science degree – or not is perhaps the most loaded of them all. If you look at all the skills you need to be successful in this field, it almost seems like the obvious answer would be yes, you definitely need a degree. The reality is quite a bit different, though. Let me tell you a little bit about myself. As of this writing, I’m 51 years old. I’ve been a professional developer for 28 years, and I did some consulting before that for a bit over 5 years. I’ve been programming in one form or another for right around 45 years in total – yes, I really did start when I was around 6! This has been a lifelong passion of mine, and the fact that I’ve had a long and fruitful career is in some ways just a bonus. But you know what I don’t have? That’s right: a college degree. I did attend college for a little while, but I had to drop out for personal reasons about two years short of a degree. I went back a little later and took some classes with the intent of getting that degree. But I was primarily doing it for career reasons at that point, and here’s the simple truth: not having a degree didn’t stop me from getting into the field and hasn’t ever held me back any. Now, I don’t want to give any false impressions here: my path probably would have been easier – and certainly shorter – had I completed my degree in the first place, and I certainly would have made more money right out of the gate than I did. I also spent a lot of years convinced no one would give me the time of day without that piece of paper hanging on the wall, so I didn’t even try. That was a mistake. The truth is that in this field, if you can show that you know your stuff, then a degree won’t stop you from getting your foot in the door. It may mean a bit less money at first, and it may mean there’s a ceiling to your career – I’ll probably never have a shot at a C-suite level position (CEO, CIO, etc.) – but you can be gainfully employed without one for sure. It’s all about demonstrated ability – even if you have a Computer Science degree, while that shows you probably have a decent foundation, as we previously discussed, you’re still going to have a lot of on-the-job learning to do. Having a degree shows you have many good qualities, but it doesn’t necessarily mean you have even a fraction of the knowledge you need to be a solid web developer. And to be clear, some companies do view having a degree as very important, and some will even use it as a litmus test, meaning if you don’t have one then your resume may get tossed in the trash immediately. It’s a hard requirement for some companies to be sure, though in my experience that’s 18 So, You Want to Be a Web Developer, eh? the exception, not the rule. That’s sad, honestly, because it means these companies are passing up some potentially great candidates for arguably no good reason. But, at the end of the day, that’s their call, and as a job seeker, there’s nothing you can do about it. You’ll just have to grin and bear it if you run into such situations and tailor your search accordingly. So, to summarize: no, having a degree isn’t required to be a web developer – it’s not a dealbreaker if you don’t have one in most cases, and I’m living proof of that! Of course, that doesn’t mean there aren’t benefits to having one, but it primarily comes down to your own goals and desired path. If a degree is important to you, then by all means, get one. If maximizing your earnings at every level is a primary consideration, then yes, a degree may help. If you have dreams of eventually flying on the corporate jet and running the show from the CEO’s office, then yes, you’ll likely need a degree. But you can definitely have a good, long, well-paying career as a web developer without one, so long as you put in the time and effort to make yourself someone whom good companies won’t want to pass up, despite not having the framed paper on the wall. Now that you have some idea of what’s involved in being a web developer in terms of abilities, degrees, and such, let’s take a look at what a typical day might look like on the job. Examining a typical day in the life of a web developer Now that you have an idea of what a web developer is and what it takes to be one, the next logical question to ask (and remember, we’re big on logic around here!) is what does a typical day look like for a web developer? You know, aside from the rampant hero-worshipping, of course! Figure 1.5: Yes, we web developers are that cool! This is no simple question because there are a great many variables involved. But if I think through what I and those people I work with do daily, there begins to emerge a very rough and generalized structure that tends to apply to most web developers most of the time. Let’s see what that looks like. Examining a typical day in the life of a web developer 19 The duties of a web developer Firstly, there are some common tasks that you’ll wind up doing most days: Coding: Well, I’m sure that’s no surprise! You will obviously spend a lot of your time writing code to actually make websites. But depending on the day, sometimes this will be where most of your time goes, and sometimes it’ll wind up being where the least goes. Meetings: As with Monty Python and their Spanish Inquisition bit, no one escapes meetings. It might be with stakeholders to go over the previous day’s work. It might be other developers you have to coordinate with. It might be your manager to figure out what task to do next. But regardless of what it’s for, meetings will for sure be a part of your daily life. Version control: This is a topic I’ll get into later, but in short, version control is how you keep your work safe so you don’t lose it, and it’s also a way that allows you to go back to a previous version of your work if needed. There’s more to it than that, but that’s the 10,000-foot view. Testing: Once you write your code, you of course need to make sure it works right, so testing will be a big part of what you do. Sometimes you’ll work with others who will do the testing for you, and sometimes you will be doing it yourself (and there are multiple types and levels of testing, but that’s a discussion for later). Documentation: Writing various forms of documentation is an important thing to do, for yourself as well as others. It might be design documents that explain what you’re building, or it might be usage documentation for your end users, to name just two. Task management: Every project you work on will be broken down into many different parts because beyond a certain level of complexity – a level that you can reach very quickly – a project is too big to do in one piece. These parts will become tasks, and managing those tasks becomes important to managing the project. This will often take the form of a task management system such as Jira where you will have tickets – tasks, essentially – to work on and that you’ll need to update the status on as you work on the task. Deployments: Once you have code that’s ready for prime time, or even just for testing, you have to put it somewhere that others can access. This is called “deploying” code, and while it’s not something you’ll do every day necessarily, it can be a frequent occurrence. Code reviews: When you’re working with others, it’s not uncommon to review each other’s work. They may send you their changes and ask you to test them or just read the code and look for problems, and vice versa. Research: Taking time to explore new technologies or to figure out how to effectively use one will be a big part of your job as a web developer. Building proof of concept (PoC) code is a common manifestation of that research. A PoC is a lot like a prototype in that it’s code that may or may not be molded into a final form later on and definitely isn’t written as such from the start. The key difference – though I’ll say up front that it’s a fine line – is that a PoC is the term usually applied when you aren’t quite sure something is actually doable at all and you 20 So, You Want to Be a Web Developer, eh? want to prove the idea out, whereas, with a prototype, you more or less know it’s doable and you just want to produce something tangible for people to look at and play with a bit before you get into doing it for real. A typical day Okay, those are the kinds of things you can expect to have to do (almost) every day. But what does a typical day look like? Again, I have to stress that this is a very generalized description. No two developers will have the same day, and a single developer may have days that vary a lot too. But, as a gross generalization, this probably isn’t too far off what you’ll experience most days: 8:00 am: Arrive at the office or start working remotely. Check emails and Slack/Discord/Teams messages, and review any issues that may have occurred overnight. 8:30 am: Daily stand-up meeting. This is a very brief meeting between team members where you provide your current status, what you did the previous day, what you plan to do today, and any roadblocks you may have. It’s called a stand-up meeting because it often is done, literally, with everyone standing, with the goal being to ensure it only lasts a few minutes. 9:00 am: Review and prioritize your tasks for the day and update them as necessary in your task management system. 9:30 am: Dive into coding. Whether that means developing new features, fixing bugs, or reviewing the code of others, it’s time to actually put the pedal to the metal and do some work! 11:00 am: Have a meeting to discuss the project with stakeholders. You may demo what you’ve done recently for them, or just discuss next steps and requirements. 12:00 pm: Break for lunch. This is also a good time to socialize with coworkers a bit. While there is absolutely no requirement that you are friends with the people you work with, being friendly with them really does make for a much better work experience, so don’t sleep on this part of your day! 1:00 pm: Resume coding. This is often a good time of day to focus on more complex tasks that take more mental effort to accomplish, because most people tend to be in a better headspace around this time of day (of course, that’s not true for everyone, and you need to figure out what works for you and arrange your days accordingly). 2:30 pm: Attend a meeting to plan future work. A lot of companies use what’s called an Agile methodology, which is something we’ll get into in future chapters. But, in short, it’s an approach to managing a project that emphasizes small bursts of productivity called sprints and allows a team to self-direct itself (for the most part). To make this work, meetings to do sprint planning and backlog grooming (essentially, the act of prioritizing known future work) happen fairly often. 3:00 pm: Return to coding, perhaps this time focusing on unit tests (small, highly focused testing that developers do on small portions of a larger system to ensure they work right individually) or debugging (fixing code that isn’t quite working right). Understanding the one truly invaluable skill: logical thinking 21 4:00 pm: Update documentation, save the changes you’ve made for the day in a version control system for safekeeping, and begin to plan the next day’s work. 5:00 pm: Begin to wind down for the day, or perhaps deploy code, depending on the day. 6:00 pm: Hit the bricks! Take off, run out the door, whatever phrase you prefer to mean “It’s time to forget this place for the day and have some fun,” because work/life balance is of critical importance, and you should strive to not take your work home in any way. Once you leave for the day, put it out of your mind as much as possible and enjoy your life. I must stress again that this is an extremely rough and very generalized outline. Your day may look quite different from this. There may be other tasks you have to partake in, and for some of these, you may not do much, if at all. Some days, you’ll spend 99% of your time coding, and other days, you’ll barely write a single line of code. Even if the previous workday structure is typical, days will fluctuate for sure, and you’ll need to be okay with that. But this outline shouldn’t be too far off reality most days in most environments. While I’ve at least hinted at it before now, there’s really one key skill that I think any web developer absolutely needs to have, and that’s logical thinking. Understanding the one truly invaluable skill: logical thinking I’ve talked about several skills and abilities you need to have as a web developer, and to be sure, they’re all important. But of all of them, the one that I think rises above the rest is logical thinking. I’ve said that before, but let’s talk about why it’s so critical in a bit more detail. The ability to think logically is at the core of what we web developers do because at the end of the day, what we’re doing is telling the computer what to do. And, as the saying goes, computers will do exactly what you tell them to do (well, with AI in the mix, that’s becoming less and less true with each passing day, and of course, we’re all just hoping that doesn’t change and they don’t go all Skynet on us!). On top of this, computers will do it incredibly fast – so fast that you can’t even comprehend it, and if you tell them to do the wrong thing, well, they’re going to do exactly that very fast, too! So, it’s critical that you are able to organize your thoughts and instruct the computer properly to get the results you need. That means being able to start from fact A, logically figure out what fact B is, and then work out how to get there, rinsing and repeating a few thousand times, and at the end, you might have a working website or piece of software. To put it another way: the logical ordering of steps, and determining how you can branch from step B to step C, or from step B to step D depending on conditions at the time the code executes, is what it’s all about. That’s the idea that underlies it all, but we can break it down further into sub-categories because logical, ordered thinking is not a single specific skill; it’s really an amalgamation of several broad categories of skill. 22 So, You Want to Be a Web Developer, eh? Problem-solving Being able to solve problems is a skill that requires logical thinking and understanding. Having a clear picture of the desired outcome and seeing a logical set of steps to get to it is necessary to determine where in that series of steps a problem is occurring, and then how to fix it. Of course, a “problem” doesn’t just mean when something isn’t working right! A problem is also when you’re building something for the first time from scratch, and having to see to the steps required to achieve your goal. Being able to break complex tasks down into manageable chunks is a hallmark of people who are good, logical thinkers. I should also note that you should be able to adjust your thinking as you go and gain new facts, because that nearly always happens as you progress in a project. To paraphrase a famous military saying: no development project survives contact with actually doing the development, meaning that no matter how logical and seemingly complete your thinking, virtually no one gets it 100% right from start to finish. You have to adapt to those “oh wow, that’s not gonna work like I thought it would” moments that are all but inevitable. Scalability One of the big concerns when building software, be it a website or otherwise, is whether it can scale, meaning whether it can handle more usage over time. A website can only handle so many users at once, and this is a limit of many factors including the network, the server it’s hosted on, and of course, the code itself. Being able to think logically will allow you to see the places where scalability is limited. For example, if your code frequently reads data from a database, you may consider caching the data, which means storing it in a location that can be accessed faster than the database. Another aspect of scalability is being able to change the code over time. Thinking logically will allow you to organize the code in such a way that future changes are easier and don’t risk breaking the existing functionality. This might mean abstraction layers (a coding concept that tries to keep two parts of a system separated by a layer that can be changed more easily than either of the two parts), or perhaps a plugin mechanism (the ability to add new code in a standard way that doesn’t require changing existing code), or a myriad of other possibilities. Team collaboration It may not be obvious, but logical thinking when interacting with others can be very important because it helps you comprehend what they’re saying, even if it might not be clear from their words. This can be especially important when interacting with other developers. If you are all thinking logically it can almost be a magical experience! You might even find yourselves completing each other’s (technical) thoughts. Understanding the one truly invaluable skill: logical thinking 23 User experience The notion of user experience is a big concern. Is a website easy to use? Are its functions obvious to most people? Is it designed in such a way that it’s difficult for users to make mistakes? If they do make mistakes, is it easy for them to recover from them? Does the interface almost seem to magically anticipate user needs? All these things and more are aspects of user experience (UX) and things where logical thinking definitely factors in. This is especially true because UX tends to be based on quantifiable, observable facts. Things such as user studies come into play, where you observe a user using your website to see where they stumble (and let them tell you specifically). What you’ll find often is that their mental model, that is, how their brain is telling them things should work, won’t always match up with reality, and you’ll need to logically analyze their expectations as compared to what you built and figure out how to move them closer together. Error handling Software of any kind is designed with “failure modes” in mind. Failure modes are the ways the code you write can fail, which you can determine beforehand. For example, maybe your website has to ask another for a banner ad, but what happens if that remote system doesn’t respond? Your code must anticipate and handle that possibility without the whole site crashing and burning before your users’ eyes. That’s something you can know is possible as you write the code, so you write code to handle that particular failure mode. Being able to think logically will allow you to find those possible failure modes and code for them, resulting in more reliable code and a better experience for your users. Security As I’m sure you’re aware, security is of paramount importance these days. It seems like barely a day goes by when we don’t hear about some monumental breach of data on some site. Security is exceptionally difficult to get right, but it’s basically impossible without logical thinking. Here’s the weird part, though: the way threat actors – or hackers, as people tend to say – work is to think very logically, but in very unexpected ways. You see, they know how your website handles its security tokens, for example. They understand it very logically. But then, they’ll throw logic out the window and start trying things that seem just plain nuts, sometimes! Unfortunately for us developers, they’ll frequently find holes in our security that way. Or sometimes they’ll take a series of logical steps that alone aren’t a problem, but when taken together suddenly result in a security exploit. Your only hope is to be able to match their ability to think logically and outside the box. But you can’t do the latter until you can do the former! 24 So, You Want to Be a Web Developer, eh? Testing Similar to security, testing requires logical thinking because what you’ll try to do is ensure that your code handles things as it’s expected to, but also that it handles when the conditions aren’t quite right. For example, if you have a piece of code that divides two numbers, you’ll of course test whether 10 divided by 2 equals 5. That will be one test. But you’ll also do another that tests what happens if you try to do 10 divided by 0. What does the code do then? Aside from you needing to write the code in such a way that it can handle that situation in some meaningful way, you’ll need to test that handling, and logical thinking is what allows you to come up with those tests. Data flow The idea of data flow is simply how data moves around different parts of your code or system. If you have some data that describes a person – things such as their name, age, and phone number – that data may have to move around the code to perform various functions with it. That’s called a “data flow,” an example of which can be seen in Figure 1.6: Figure 1.6: An example of data flow between different parts of a program Figure 1.6 shows how data flows between components in an application I wrote for one of my older books – you are not expected to understand this right now; it’s just to give an example of what a data flow can look like. Being able to think logically about how data flows through the various parts of your code is key. And it’s more important when that data can move between systems, or parts of a system that may not all be running on the same physical machine, be those databases or other remote systems that perform some function on your behalf and return a result. Understanding the one truly invaluable skill: logical thinking 25 Resource management Whenever you write software of any kind, you’ll need to consider resource utilization. In fact, if you get your Computer Science degree, you’ll be all too familiar with things such as Big O notation, which is intended to allow quantification of this resource utilization. A computer can only do so much work. It’s limited by many factors, things such as how fast its central processing unit (CPU) is, how much memory it has and how fast that memory is, how fast its network connection is and how much data can be transferred over it, the efficiency of its storage devices, and so on. The code you write uses all these resources to varying degrees, and you have to design the code with them in mind to use them efficiently. That means not only ensuring that you don’t try to use more than you have, but also that you are utilizing the full potential of the system you’re running on. And it all requires logical thinking to understand how resources are utilized over time. Debugging When we write software, we have failure modes, as I mentioned before. In addition, we also have bugs, which are essentially failure modes that we don’t anticipate. A user entering letters where numbers are expected and our code then trying to do math on it might be one such example. The ability to think in a logical, ordered fashion improves your ability to methodically step through code to identify issues. Figure 1.7: Bugs – they’ll bite ya every time! The alternative is a “trial and error” approach, where you see something broken, make a change almost at random, and see what the result is. Admittedly, sometimes you’ll wind up doing that anyway, as you might not have all the information you need to logically figure out a problem. But the ability to think logically will help you avoid this, which is helpful because trial and error tends to be less efficient in most cases. 26 So, You Want to Be a Web Developer, eh? As an aside, did you know that these unanticipated failure modes we call bugs originated from someone removing literal bugs? It goes all the way back to 1946 and a lady named Grace Hopper. Back then, computers worked very differently from how they do today. One of the big ways was that instead of transistors – small electronic elements – they used relays. A relay is essentially a small switch, not unlike the light switch on your wall, but with the key difference that the switch can be moved when electricity is applied to it. These relays serve the same purpose as transistors do today: they represent 0s and 1s in our system (where 0 means no electricity is flowing and 1 means electricity is flowing). It may sound impossible, but from that one simple principle, you can build up a complex computing system. But you can also get some interesting problems from such simple foundations! One night, Grace discovered that the computer she was working on was giving erroneous results. She began tracing the problem (using logical thinking, of course!) to figure out where the problem was. She eventually found it: there was a deceased moth inside of one of the relays. The moth was stopping a relay from closing when electricity was applied, meaning that the computer saw it as having a value of 0 instead of 1. The report of this incident literally listed the cause of the problem as a “bug” in the relay; hence, a now well-known computer term was coined! This is also where the term “debugging” comes from! Documentation Logical thinking is required when writing documentation of all sorts because if it’s not written logically then no one is going to understand it, and that someone might wind up being you a few months later! Part of it is being able to get into the heads of your users, in a sense. You have to understand how they are going to approach using what you create, and you then have to write documentation that anticipates their questions and provides them with the answers they will need. Of course, documentation for users is only one type of documentation, and it’s actually a type that you may or may not ever need to write, depending on the environment you work in (at my company, we have a team dedicated to this duty, so while I work with them, they are the ones primarily responsible for it). There is also documentation embedded in the code you write, or at least there should be! This type of documentation, called comments, explains what the code is intended to do, as well as any tricky things that might have come up when writing it that someone may need to know about later. You write these comments for other developers who may have to work on the code someday, but you also write it for yourself, because you will definitely not remember everything that went into the code you wrote a few months later, believe me! Having explanations right there in the code is very important, and these comments clearly need to make sense or they won’t be of much value (they can actually be harmful if not well-written since they can lead a developer down the wrong path), so logical thinking sure does come in handy here, too! Understanding the one truly invaluable skill: logical thinking 27 Adaptability As I’ve mentioned a few times, you are seeking to enter a field that is constantly changing, with new technologies hitting the scene all the time. But here’s the dirty little secret: the vast majority of these “new” technologies are really just rehashing old ideas, dressing them up – and yes, maybe advancing them a bit – and presenting them as new. Where logical thinking comes into play is that once you have some technical know-how and experience, and you see the “new” hotness, you’ll also start to see how it relates to what came before. You’ll connect the dots a lot faster, which means you’ll be able to adapt to the new stuff much faster and more efficiently. Decision-making Logical thinking when making decisions is probably an obvious one, but it’s worth mentioning because decision-making comes in all shapes and sizes. For example, which design pattern should you use for a given piece of code? Or how do you structure your CSS (Cascading Style Sheets, a concept we’ll get into later, but briefly, it allows you to apply things such as colors, fonts, and positionings to things on a web page) so that it is reusable and maintainable? Your life as a web developer will be a series of decisions both large and small, and the better able you are to think logically about the options you have and the consequences of choosing each one, the better decision-maker you’ll be. Communication Finally, simple communication, in all its forms, is aided greatly by logical thinking ability. Just like with documentation – which is a form of communication, after all – the more cogently you can express your thoughts, the better communicator you’ll be. This can be technical communication, or not. Managing a project, for example, is a tough task sometimes, and being able to talk about the current and future status logically is a key ability to make the project doable. That’s all great, but can logical thinking be learned? Speaking of logical thinking, the final point I’ll make is to try to answer a logical question that may be in your head right now: can you learn how to think logically, or is it a purely innate ability that you either have or not? To cut to the chase: yes, I believe it’s a skill you can learn, though it does take effort, and at the same time, I do think that some people come by this ability more naturally than others. Or, maybe it’s more precise to say that whatever level of innate logical thinking you have can be accentuated and enhanced over time. We’ve talked a lot about what it takes to be a web developer, but in fact, the term “web developer” can mean several different things. That’s right, there really are multiple kinds of web developers! Let’s talk a bit about that now. 28 So, You Want to Be a Web Developer, eh? Exploring the different types of web developers Being a web developer doesn’t mean being just one thing. Well, not necessarily at least. There are variations on a theme. It boils down to three main categories that a “web developer” can fall into: frontend, backend, and full stack web developers. But before we can really even talk about the distinction between these three, you have to have at least a cursory understanding of how a network, the internet, and the web on top of it function, so let’s look at that so you have the necessary foundation to understand the three categories. The (very) basics of the internet and the web Before we can get into that, though, I have to make sure you have a basic understanding of how this thing called the web, which is short for the World Wide Web (which, by the way, is where the “www” in addresses for websites come from, as in www.google.com), works at a high level. Firstly, it’s important to realize that the internet isn’t the same as the web. Granted, it’s kind of come to mean the same thing to most people over the years, but strictly speaking, it’s not true. The web is just one component of the internet, which is itself a massive number of computers all connected together over a network, similar to what is shown in Figure 1.8: Figure 1.8: An example of a (small) network structure (multiply by millions for the internet!) Exploring the different types of web developers 29 The web is one component, but some others are Usenet (newsgroups), POP3/IMAP/SMTP (email), Gopher (this doesn’t really exist anymore, but it was a precursor to the web), and a few others that are basically irrelevant now. All these things connect over the internet, but the web is kind of special because, as I mentioned, it has come to mean the internet itself, since almost all activity on the internet these days is conducted over the web. But, for our purposes here, that’s all just a bit of history and pedantry. What’s important is what happens when you enter the address of a website into your browser’s address bar. The main thing to understand is that your computer is connecting to another out there, which we term the server, because it’s serving content to your machine. When you type in, say, google.com, your computer makes a connection to a computer owned by Google. That server returns the code that makes up the Google website to your browser, which then uses those instructions to show the page on your screen. When you develop a website, there is code that runs in the browser, but there is also code that runs on the server, which produces the code that the browser executes, in a sense. This dichotomy is where two types of web developers come into play: frontend developers and backend developers. Two sides of a coin – frontend and backend developers Frontend developers write the code that the browser executes. They deal with things such as HTML (an acronym for HyperText Markup Language), CSS, and JavaScript (which I’ll abbreviate as JS from here on out, and which is a programming language your browser understands). We’ll dive into these in the chapters to come, but for now, the key thing to understand is that these are essentially the three pillars of the web. They are, by and large, all your browser knows how to work with, and they are the three technologies that all websites are built on. Now, because I don’t want to leave you hanging, here’s an example of all of those technologies: A very simple example of Web technologies.description { padding-top: 40px; font-weight: bold; 30 So, You Want to Be a Web Developer, eh? } function start() { setInterval(function() { const red = Math.floor(Math.random() * 256) + 1; const green = Math.floor(Math.random() * 256) + 1; const blue = Math.floor(Math.random() * 256) + 1; document.getElementById("myHeading").style.color = `#${red.toString(16)}${green.toString(16)}${blue. toString(16)}`; }, 250); } Fisher Price's My First Website™ This is a very simple example that shows HTML, CSS, and JS Don’t worry, you are in no way expected to understand any of that code (or the math it uses either) at this point – but you will by the end of this book! The goal right now is simply to give you a complete, working example of a website that actually does something, and that might be a little fun for you as a reader to see. In fact, to get the full experience, open a text editor such as Notepad, type the code in, save it with the name test.html, and then double-click it to launch it in your browser. The result is nothing to write home about to be sure, but it is a complete website, and it does demonstrate those three key technologies in a very basic way. Backend developers, by contrast, write the code that executes on the server. There are many different technologies you might deal with there. Some of the most popular today are Java, Node, PHP, and Exploring the different types of web developers 31.NET, but that’s far from an exhaustive list. A backend developer specializes in these technologies, and for the most part isn’t concerned with what winds up on your screen, at least not in a direct way like frontend developers are. Instead, they deal more with things such as databases, cloud compute layers (something else we’ll touch on later), caching, app servers, session management, authentication, authorization (proving who you are and what you’re allowed to do), and more. Some developers specialize in one of these two areas, and they let someone else do the other side of the equation. In some organizations, there will be entire teams dedicated to each side of the client/server divide, and rarely will they meet directly (to be sure, they have to communicate and work together, but they basically function independently except at the point where they have to integrate their work). And the, uhh, third side of the coin – full-stack developers! By contrast, there are also full stack developers, which means web developers who deal with both frontend and backend coding. I think it’s reasonable to say that there are more web developers who are full-stack developers these days than specialized ones, and there do tend to be more job opportunities for full-stack developers. Obviously, though, that requires learning more and being able to do more. In the next chapter, I’m going to go into a bit more detail about these roles, especially the full stack developer role, but these descriptions are the broad strokes, so to speak. Another way to classify web developers Aside from the frontend versus backend versus full stack classifications, the other thing that tends to divide web developers is whether you’re a full-time employee somewhere, or a member of the “gig economy.” Being a full-time employee means what it means in any other job: you work for someone, probably 40 hours a week or so generally. You’ll be at the whim of others, and your client, your stakeholder, is essentially your boss. They’ll tell you what to build, and you certainly will have input, but it’s ultimately up to them what gets done, and to a certain extent, how it gets done. Being full-time has some clear benefits. For one thing, it’s steady work. You know you’re getting a paycheck every week or two, and the odds are you’ll be salaried so that income will be consistent. Benefits such as health insurance tend to be handled by the company (which can be a negative too, depending on what they offer, but at least you’ll have the option without having to go out and get it yourself). Things such as 401Ks, bonuses, and profit-sharing may be part of your total compensation package as well. The other career path is being a consultant, contractor, or freelancer, which are all more or less the same thing: you work for someone for a set-length engagement, and then you move on to another job. This path is appealing to many people because it means more freedom, as well as exposure to more technologies and a more diverse slate of work. Some people find this extremely stimulating and rewarding. There is also – generally speaking – more opportunity for higher pay because you can set 32 So, You Want to Be a Web Developer, eh? your own rates, and if someone is willing to pay that rate, then it might be a lot more than you could get at a regular full-time job. But there are also negatives to be aware of. Remember when I mentioned health insurance? Well, that’ll be your problem; you’ll have to go out, find insurance that works for you, and purchase it. You’ll need to worry about paying that bill every month rather than it just coming off the top of your regular paycheck in a full-time job. Also, taxes are something you’ll have to account for and pay yourself. Independent work such as this can also be more frustrating than a regular gig because clients will sometimes treat contractors a little less nicely than their regular employees (this obviously depends on the client – some are absolutely fantastic and treat you practically like family, so long as you’re doing the job well for them!). Ultimately, which path you choose, in terms of regular full-time employment or a freelance approach, will be entirely up to you. You have to look at the pluses and minuses and decide what’s important to you. And note that whichever way you go, you can still choose to specialize in frontend or backend or to be a full stack developer (though if you decide to be a specialized freelancer then that’s going to limit your opportunities even more than if you do that with a full-time job, so you might want to consider that too). Knowing the types of web developers there are and how we classify web developer jobs is helpful for sure, since it allows you to tailor your learning to the topics that are critical to the role that you’re interested in. With that in mind, let’s talk a little about some other ways, besides self-guided learning, that you might employ to meet your learning goals. Learning with, and from, others I’ve mentioned the notion of self-guided learning a few times, at least the basic concept of it. It’s not possible to learn enough on your own in all fields to be able to get a job, but this is one field where that’s definitely possible, and even necessary over time since you’ll never be able to stop learning completely. But in this section, I want to point out that it’s not the only option available to you. You’ll need to figure out what your own personal learning style is because not everyone is able to effectively learn the same way. Some people can read a book such as this and get everything they need from it. Others can watch a bunch of videos on YouTube and be all the better for it. And some people need to be in a classroom environment, and they must have a person they can interact with and question along the way. All of these are valid learning styles, and you should never be ashamed of your own learning style. Instead, once you understand what it is, embrace it and look for options that fit it to make the most effective use of your learning time. But if you determine that self-guided learning, in whatever form that takes, isn’t what’s best for you, here are a few more options you can consider, aside from formal schooling. Learning with, and from, others 33 Boot camps Aside from the obvious option of college, there are other learning opportunities available to people these days, probably the most well-known being boot camps. A boot camp is essentially a relatively short – as compared to college – and very intensive class or series of classes. They tend to last 3-6 months, though can be shorter or longer. The goal of a boot camp is to teach you things very quickly to get you ready for entry into a career as quickly as possible. These are good choices for some people, though probably not everyone. Figure 1.9: A boot camp, one where a drill sergeant won’t be constantly yelling at you! For one thing, boot camps tend to be best for people who already have some degree of technical know- how. While not impossible, it would be very difficult to go from essentially zero technical knowledge to knowing enough to find a job in this field from just a boot camp. But, if you already have some knowledge, a boot camp can build upon that foundation quickly in an effective way. Boot camps, however, are not free. Their cost can vary a lot, from several hundred dollars to many thousands of dollars. That’s one of the pluses of self-guided learning: while there are many paid options, there are also a ton of good free ones. Still, having someone guide you and having someone whom you can ask questions during your learning is a benefit of a boot camp. Boot camps are also viable for developers who are already working. You may have to shift gears – perhaps from frontend to backend, as an example – and get up to speed quickly. Boot camps could be ideal for that, especially if your current employer is willing to foot the bill. As you might guess, the quality of boot camps varies. If you get into a good one, you’ll definitely get your money’s worth and learn a lot quickly. But there’s a chance the one you pick won’t be very good and will only give you a very surface-level understanding. This might not be a major problem if you’re already a developer and are just learning a new skill (though it’s still not ideal when you’re paying for 34 So, You Want to Be a Web Developer, eh? it), but it’s a bigger risk for someone who expects to find gainful first-time employment out of a boot camp. So, before you sign up for one, make sure you do your research. Read as many reviews as you can, and try to find people who have been through it to get a direct opinion of it. Boot camps have value, but they aren’t the be-all and end-all either. The personal touch Another approach you can take is to find a mentor. In the early 80s, when I began learning Assembly language (which is a particularly unpleasant language to program in) for the old Commodore 64 computer, I had books and magazine articles to read, but it never felt like enough. I figured a lot of things out that way, but I was never able to do the more complex things I saw in video games and other programs of the day. That changed when I found an especially kind older kid who was able to do those things and took me under his wing. My learning accelerated exponentially almost overnight and before long, I was creating things that I’d thought I’d never be able to. Finding a mentor these days is difficult, but not impossible. It takes getting into contact with people who know what you want to learn and approaching them, hoping someone will show the same kind of kindness that kid did for me. It’s a big ask, to be sure; we’re all busy as heck these days, and taking time out for someone else like that is no small thing. But now and again, you’ll meet someone willing to, and that can be a big boost. How would you meet such people when you aren’t already in the field? Well, one way – something I’ll get into a bit more later – is meetups, or as we used to call them: user groups. There are websites that will give you a list of such things in your area, and they usually let anyone come to them. There, you’ll meet techies of all sorts and experience levels. If you’re an outgoing person, this is a great chance to meet them, get to know them, and maybe eventually ask someone to mentor you. Again, it’s not something you can expect of people – you certainly can’t get mad at anyone who says no – but some people simply enjoy the process of teaching others. It’s one of the main reasons I’ve written as many books as I have. If you can find someone with that mindset, then you’ve found yourself a good resource and you shouldn’t be shy about taking advantage of it. On-the-job learning The final thing I’ll mention is on-the-job training. Web development isn’t like a trade field, where you can sometimes find entry-level positions as an apprentice and you’ll be taught the trade from scratch. There are sometimes web development internships along those lines, but they are fairly rare and generally for students coming out of school – besides that, entry-level jobs in software development where you aren’t expected to know anything up-front are virtually non-existent. Instead, you’ll be expected to know some stuff from day one. Of course, that isn’t to say that you have to know everything – to be sure, you will learn on the job as a matter of course – it’s just that you can’t go in without at least foundational knowledge. Introducing the roadmap 35 The bottom line to all of this, whether you’re considering boot camps, mentorships, or even internships if you can manage to find one, is to always take advantage of the knowledge of others any time you can. Listen to them, learn from them, and try and get as much benefit from their experience and expertise as you can. Other people can be a valuable resource in your learning journey outside of a classroom setting, so don’t miss the opportunity to avail yourself of folks when you can. Introducing the roadmap Finally, throughout this book, each chapter will begin with a diagram like what can be seen in Figure 1.10: Figure 1.10: The roadmap As you can see, it doesn’t show much right now. What it does show is the central starting point – Web Developer – and the critical skill of Logical Thinking (on the left), perhaps the one true foundational ability a web developer needs. As we progress through the book, each square will be revealed, illustrating the key skills that go into being a web developer. 36 So, You Want to Be a Web Developer, eh? Note Although tangential, it may be worth noting that this type of diagram, which is usually called a mindmap or sometimes a creative radial diagram, is often seen when developing software of all types, including websites. It shows the relationship between parts of a larger concept, whether that concept is a web developer as it is here, a web page (where the center point might be the screen that a user sees when they first come to the site), or perhaps showing different components of a system and how they connect to each other. So, seeing it here and being able to understand it is in itself a useful skill to learn! Summary In this chapter, you got a brief introduction to the field of web development. Here, you developed a mental picture of what the job entails, what skills are necessary, and what type of people are typically good at it. We talked about how to determine whether it’s right for you, including the fact that you like to solve puzzles since that is, to a large extent, what the job is all about! If you find that fun, as I do, then you’ll love the field! We also started building the very lowest levels of a knowledge foundation that we can build upon going forward and learned how logical thinking is a key requirement, as is the ability to learn new things. You got your first look at some real code, and hopefully, you played with it in a real web browser and saw it in action. And while it wasn’t anything grandiose, I hope it at least started to get you excited about what’s to come. Plus, you caught a glimpse of a typical day in the life of a web developer and gained an understanding of the different types of web developers (and where those types overlap). Maybe you even started to consider what side of the frontend/backend divide you might prefer (though get ready, because from here on out, you’re going to get some experience with both!). In fact, in the next chapter, we’ll peer a bit deeper into the differences between frontend developers and backend developers, and the intersection of the two in the full-stack developer title. This is a topic worthy of further exploration – which I hope you find fun and mentally stimulating – and that’s exactly where we’re headed next!