Visit Amazon.com, and just look around the homepage for a moment. You will see a search bar, a link to Amazon's various departments, a link to your account, a few targeted ads for items you have looked at recently, and perhaps an obnoxiously large banner ad for the newest Alexa product. On its surface, it looks like a relatively simple - if disorganized - website. But what goes on behind the scenes every time you hit Amazon's homepage is far more complex than you might imagine.
Each time you hit enter in your browser, an intricate orchestra begins to play a cleverly composed symphony: Your browser sends a request out into the ether. Somewhere, an AWS server receives the request and passes it off to a handler to generate a response. The handler is a program (written by, for example, a Python software developer) that reads the request, its headers and the cookies to see what is being requested and whether or not the server needs to be updated.
Then, it assembles a response. In Amazon's case, this might mean it runs your recent browsing and purchase history through an algorithm to determine which products you are most likely to buy next, so it can display those to you. It might also offer you hints at how to use your Prime membership to its fullest extent in order to keep you locked into the Amazon ecosystem.
All of this information is rapidly assembled and transmitted back to your computer, where your browser parses the information and decides how it should be displayed to you.
From start to finish, the entire operation is so smooth and so fast that you might never even notice it is happening. That is the result of masterful web development. "Web development" refers specifically to the creation and maintenance of code - the program that determined what information should be sent back to your screen.
More broadly, the term comprises every step of development, including identifying the need, planning the website, designing the layout, writing the code, testing the code, documenting the code, deploying the code and maintaining the website.
All web development is performed for one of three purposes:
- To meet the needs of a business.
- To meet the needs of a group of people.
- To meet the developer's own needs.
Web developers are people who create websites and web applications for the internet. They are capable of building every part of a site; for example, they can determine the optimal layout for the website, write the code that powers the website, manage the server that collects information from users and create a content management system to house that user information.
Because they need to be incredibly versatile in their work, developers are often modern-day Samurai, with skills in many tangential disciplines such as copywriting and graphic design.
There are four different types of web developers, and their job description and the skill sets they require are continually shifting. To understand how their respective jobs are delineated, think of a house being built. One crew comes out to lay the foundation and frame the house. A second comes to install electricity and plumbing. The third crew installs gyprock and shingles the roof. Alternatively, some custom houses are built by a crew that builds the entire structure from the ground up.
The four examples listed above of what website developers can do were purposefully chosen: Each example is the domain of a different type of developer. Front-end developers work primarily with the client, mid-tier developers work primarily with the server, back-end developers work primarily with the server, and full-stack developers work with all three (There is a fifth type of website developer, the graphic designer - the equivalent of an interior designer - but they will not be discussed here).
But when you enter a search term and press Enter, the front-end developer's job stops, and the back-end developer's job begins. Back-end developers such as Go software developer have the thankless job of writing the code for everything that happens next. They write the code necessary for the website to provide functionality to the end user, such as writing user data to the database and fetching information for display in the browser.
Mid-tier developers are less well-known, and they are far fewer in number. But their expertise is no less vital; they install what is essentially the plumbing and electrical wiring of a website. They work on the section, called the "logic layer," that is sandwiched between the front end and the back end. It calls the database when information is necessary or needs to be written and decides what to send to the user.
The work that mid-tier developers do is naturally complex, involving concepts such as authorization, authentication and API design. They build the system that makes sure you are the person logging into your Amazon account. Fortunately, the high number of languages that can be used by mid-tier developers help to reduce the difficulty of working in such a complex environment.
Finally, full-stack developers are that rare breed that can build a custom house from the ground up. A Python software developer is not considered a full-stack developer until he has worked in multiple languages and across platforms. Full-stack developers have a general knowledge, but not necessarily a mastery, of the following:
• The server, network and hosting environment.
• Data modeling.
• Business logic.
• User interfaces.
• User experience.
• Customer needs.
Unlike other developers, who can only see a portion of the full project, full-stack developers have the advantage of being able to see and add value to the entire website as it is being developed. Because their value to the team is so evident - Facebook exclusively hires full-stack web developers - they are the most popular type of developer, according to a 2016 Stack Overflow survey.
Just like construction workers use their preferred tools and even brands of tools to work, web developers use a combination of their favorite tools to develop the different portions of a website. The "stack" is the combination of tools a web developer uses to implement a website. The stack commonly refers to four separate pieces of inter-related software: an operating system, a server, a database and a scripting language.
The operating system runs on the server and provides an interface between the hardware (the server) and the software. Operating systems take care of many tasks that you might take for granted, such as enabling the writing of files to a server and running multiple programs at once. Without an existing operating system, you would need to write a program to control every part of a server every time you wanted to develop a new site. Operating systems such as Windows, Linux and Ubuntu take care of that foundation, enabling Python software developer to focus on higher-level coding.
When referring to software, a web server is what controls how you accessed those files. When you typed in Amazon.com and hit enter, your browser began looking for the right web server based on its address. When it located that particular piece of hardware, it asked the software on the hardware to return the requested documents.
Over 85 percent of websites use one of two open source web servers: Apache or NGINX. Apache was launched in 1995, so it has the advantage of being well-documented and well-supported. NGINX was released in 2004 to tackle the intransigent problem of handling tens of thousands of concurrent sessions. Its ability to easily scale up in response to high traffic demands has made it popular with web developers.
Databases are responsible for the storage of a website's data. They make organizing and accessing data easier. When you visit Amazon, your entire order history is stored neatly in a database. All of Amazon's millions of products that you search are stored in another database. Python software developer most commonly use either PostgreSQL or MySQL for their database; while the latter has an easier learning curve, the former has more flexibility and features.
Before you can understand what a scripting language is, you must understand what it is not. It is not a programming language that requires a developer to compile the code prior to running the program. Instead, it is a subset of programming languages that are merely interpreted in order to automate the execution of a task. For example, Python software developer might use a Python script to monitor data from time to time and send out an alert when the data meets predetermined requirements.
Because there are nearly infinite combinations of these four tools, back-end development has far more variation than the front end. However, a few stacks are commonly used enough to have earned their own names. The most popular stack - and one you might have heard of - is the LAMP stack, so-called because it uses Linux for the operating system, Apache for the server, MySQL for the database and PHP for the scripting language. All of the components in a LAMP stack are free and open source, which contributes to the stack's popularity.
MEAN, a favorite of some Node web developers, is gaining on LAMP in popularity; it comprises MongoDB, Express.js, AngularJS and Node.js, and is favored for its flexibility and language uniformity. The Django stack, a favorite of some Python software developer, provides the simplicity and superior design of the Django framework, which is Python's object-orient programming environment. The stack lives up to its motto: Don't repeat yourself.
You might have noticed that the last stack mentioned used something called a "framework." If a builder working on a house needs 20 identical trusses, he will not measure, cut and assemble every individual truss by itself. Instead, he will create one pattern truss, then make the other 19 based on that pattern. Frameworks work in precisely the same way. They are pre-written volumes of code that can be modified and augmented in order to quickly build and deploy web applications.
API, which stands for Application Programming Interface, is the "part of the server that receives requests and sends responses." Put more simply, it allows separate applications to converse with each other without the need for an intermediary. Like all web development, APIs are created to serve either the needs of the developer, the business's internal needs or the needs of an external party.
Suppose your Go software developer gets hungry. He pulls out his phone and opens an application that provides food delivery for nearby restaurants; when he requests a menu from a specific restaurant, the application uses that restaurant's API to find and transmit the menu. When he places his order for food, the data he enters into the application is converted into plain text and transmitted to the restaurant via their API.
The illustration works on another level, too: The developer did not need to know how the food was made or even how it was delivered to him. He just needed to know what he wanted for lunch that day. APIs work in much the same way. A "menu" of operations is given to a developer along with a description of what each one does. Then, the developer can use those operations to call up data from a third party and seamlessly present it to the user.
Thankfully, the cloud is a concept that does not need to be understood in order to be used; even Microsoft admits it is not readily defined or understood. The cloud is not one single entity. It is a network of remote web servers - the physical hardware and the software it runs - that can be used to store, manage or deliver data, or to run applications.
The purpose of the cloud is to optimize energy usage and efficiency by making content and applications available from anywhere with an internet connection.
Just like its eponymous counterparts, the cloud comes in several shapes and sizes:
• A public cloud is what you are most familiar with. It shares data with the public over the Internet.
• A private cloud is used by organizations to store and serve internal data.
• A hybrid cloud shares data both with the public and internally, depending on what is needed.
• A community cloud, the least commonly used type, is used to share resources between organizations.
The language chosen for web development would seem to be a simple matter of preference or utility. But ask any Python software developer, Go software developer or Node software developer, and you will quickly find otherwise. Like any sport, each programming language has its own ecosystem, subcultures and philosophy. Using a programming language must be a good fit not only for the project, but for the organization.
Python, for instance, is the rock climbing of programming languages. It is inherently inclusive, with a commitment to teaching new developers, investing in community and producing open source software. Also, like the sport, the language is easy to learn, and is wonderfully efficient. It can be used to build both web applications and APIs. Its versatility means that Python software developer work for many financial institutions, such as Goldman Sachs; tech companies, such as Uber and Netflix; and government agencies such as NASA. Because Python is a relatively older language, Python software developer have a large number of frameworks from which to choose, making development rapid and efficient.
PHP is the CrossFit of programming languages. Like CrossFit was for fitness, PHP was created specifically for web development. Its goal is to get the job done, even if that means using KT tape to hold everything together. While it is an older language than Python, it remains relevant and widely used for a few reasons:
• It is one of the easiest ways to display static content on a site.
• It allows developers to see precisely how their code is structured, unlike some higher-level languages.
• Like Python, it has many frameworks available for developers to use.
• Its age means that documentation is extensive and easily available.
Node software developer are tennis players. Like the sport, the language is simple and elegant; the focus is on clean interfaces, with complexity coming via composition - the intricate dance on the court - not brute strength. A Node software developer uses the language to do one thing, and to do it very, very well. Node is based on "modules," a concept similar to that of frameworks. Node software developer create modules, which are small packages of code, that can be readily tested, simply understood and easily reused.
Scala is snowboarding: It was created nearly two decades ago but has only recently gained in popularity. It is intensely difficult to master and is much higher-level than other languages, but makes up for it with a thrilling, elegant ride to the bottom of the slopes. A portmanteau of "scale" and "language," Scala is popular with corporations that require scalability with tens of thousands of concurrent users, such as Twitter and Foursquare.
In 2009, three (future) Go software developers at Google began designing a new, experimental programming language that would keep the good parts of other languages while shedding their deficiencies; thus the rugby of programming languages, called simply "Go," was born. A Go software developer uses the language due to its ability to reduce clutter and complexity. However, a Go software developer is also well aware that the creators of the language were forced to make large sacrifices of power in the name of achieving simplicity and ease of use.
Before a player is drafted for any sport, scouts want to make sure the player knows the sport well, has a passion for the sport and is a team player. Here are seven questions you can ask a potential back-end developer to determine if they will contribute to your team's success.
1. What language do you prefer to program in, and why?
Asking an open-ended question like this will let you see how passion the developer is about their work. This gives them room to tell you how they get into programming and relate their experience since then. They will comfortably be able to show you how knowledgeable they are in their preferred field of expertise.
What you are looking for in the answer to this question is a combination of passion and flexibility: a Python software developer who cannot stop talking about the language he loves to use, but is willing to become a Node software developer if that is what it takes to get the job done.
2. Does your preferred language use object-oriented programming?
Object-oriented programming, unlike procedural programming or functional programming, views chunks of code as objects. Asking this question may get you different responses from developers using the same language. Go software developer, for example, may make a convincing argument that Go is a distinctly OOP language. The position they take will help you understand how they will work.
3. Can you explain the development environment to me as if I were a fifth grader?
Node software developer and Go software developer alike should have a distinct advantage answering this question. Look for easy to understand language, solid metaphors and simplicity without condescension. Likely, you will not understand everything your developer does; it is vital that they are able to communicate well with you without needing to teach you everything about their craft.
4. How would you scale a web service to handle 100 concurrent connections? 1,000? 10,000?
Both Go software developer and Node software developer should be able to describe creative ways of using their respective languages to accomplish this feat. Here, you are looking to weed out developers whose response is to simply throw more resources at the problem. Instead, you want them to display the ability to synthesize a depth of technical knowledge with creativity to arrive at novel solutions.
5. What industry sites and blogs do you read regularly? (alternatively, what books are you reading?)
A Node software developer who is not active on r/nodejs or a Go software developer who has not heard of r/golang is likely not staying current on how the language is developing. You want someone who is going to be able to develop a back end using the best methods and processes available.
6. What process do you use to ensure regular, effective communication with your client?
While this question has nothing to do with the technical aspect of web development, it might be the most important question on this list to get an answer to. You do not want to hire an uncommunicative developer to work on your back end, regardless of how talented or educated he or she may be. In the person's response and in your communications with them, look for clear, cogent statements and rapid replies.
7. Teach me something I do not already know in five minutes.
This interview question from Sergey Brian, cofounder of Google, gives the interviewee a broad platform from which to demonstrate his or her knowledge. Look for acuity in the process with which they arrive at a topic and the simplicity with which they describe it and ask questions to make sure they know what they are talking about. Even if they do not end up working as a developer for you, you will have learned something novel and, hopefully, valuable.