When you browse to a website you're requesting to see a website that is possibly served to you across continents, routed through a vast network of domain name servers and IP addresses in long strings of coding and rendered in a browser. These things don't happen magically! They were written by millions of people and stitched together in an intricate network of computers and cables. The magic is that you have the ability to seemlessly tap into this network as you're laying in bed watching netflix, facebook creeping your latest crush, or looking up a delicious recipe for your favorite apple pie.
We take this for granted! Let me dymistify this a bit for you. I won't try and teach about how to actually do any of this stuff but give you a high-level understanding of what "it" actually is and where to look to learn more.
When you type in a url, let's say netflix.com
you are actually REQUESTing an address. Your request travels over WIFI and into a cable to your INTERNET SERVICE PROVIDER or ISP. Your ISP will then forward the call to Netflix's DOMAIN NAME SYSTEM who has their INTERNET PROTOCOL address on file. Their DNS says "oh I know that name, their address is 123.123.123.123".
At this IP address is a server, which is basically just a fancy computer. On this server is a bunch of logic that pulls up the code that you're looking for, it sends that back your way. This string of code travels down the same pathways all the way to your browser and VOILA! You can now see what horrible shows you can watch till way too early in the morning.
let's say you're doing this on your laptop or desktop computer. You probably opened up a WEB BROWSER, maybe Chrome, Firefox, Safari (or dare I say it? Internet Explorer! GASP!), these are just native applications that are specially designed for sending and recieving this type of data. They excell at rendering HTML, styled with CSS, and fancied up with JAVASCRIPT, more on this later.
This code all came from Netflix servers. Well these are actually just computers that are optimized for recieving requests, doing some complex computing, and then sending out the desired code. You can build a server in your own home or turn your laptop into a server! But to recieve requests from the outside world you'll need to connect them to the web somehow. Sometimes this is a pain in the ass, imagine if you're serving your client's code from your basement and then something happens. A rat chews the wires, the power goes out, the basement floods, etc. You are your own tech support, you can expect your angry client to be calling your at 4am! Why not pay someone to do this for us, some kind of business that specializes in this field, they can recieve the angry call from the client now, This is referred to as a WEB HOSTING SERVICE
This is important, there are really only a couple main types of requests to netflix you would be making from your browser. They are a GET & POST request. Requests using GET should only retrieve data and should have no other effect, imagine it to be like knocking on the door of a house "Is anyone home?" -> "Who is it, state your business, and what's the password?". A POST request can be a more intricate, secure, and lengthy "My name is Yosuke, I'm here for.. blah blah blah blah... the password is SUPERMAN"
I've assumed that we are just sending all these requests and responses out in the open. Like travelling down the highway in my car, everyone knows who's in the car, they can read my license plate, and see my face. Everyday the web is getting more and more secure by adopting SECURE SOCKETS LAYER's. This is like traveling in a stealth car, with tinted out windows, covered license plate, and disguised as a dog.
You're seeing HTML, CSS AND JAVASCRIPT.
Hypertext Markup Language is the basis of all these webpages. It really is the only commonly supported language that all the browsers use. Your browser sees <p>Hello</p>
and it renders a paragraph with "Hello" in it. That's basically it! A series of TAGS that help a browser understand all the different parts of the code and render them accordingly.
Try this sometime, make a file somewhere in your desktop, call it whatever.html
, inside it write:
<h1>I'm big</h1>
<small>I'm small</small>
save it and then drag that file into your web browser, if your computer works like mine you should see a simple page
All modern browsers use CSS to style their HTML content, You can now add something fancy to your <h1>
tag that your wrote earlier by adding to top of that file:
<style>
h1 { background: red; color: white; }
small { font-weight: bold; text-transform: uppercase; }
</style>
This is where it gets real juicy, we can do some super fancy things with this to make our pages more dynamic or animated
<script>
document.addEventListener("DOMContentLoaded", () => {
const h1s = document.querySelectorAll("H1");
h1s.forEach(h1 => {
h1.addEventListener("click", event => {
if (event.currentTarget.style.background == "red") {
event.currentTarget.style.background = "green";
} else {
event.currentTarget.style.background = "red";
}
});
});
});
</script>
That's it! Now you can go change the world, remember the pen is mightier than the sword.
Okay obviously the above example is pretty lame. But you can go as far as you'd like with this and explore how to make your webpage prettier. For this we need to learn to design and explore how people interact with your design. What makes a good webpage?
A common pitfall of developers that I commonly hear is "I'm a programmer! I don't need to learn design!" and vice-versa from designers "I'm a designer all the crunchy programming is impossible for me!" This narrative is probably the number one thing that prevented a lot of my fellow classmates from getting jobs right after completing their schooling.
A good programmer or designer understands that good design and code lives symbiotically with one another. For instance the speed at which a webpage loads is both a designer and programmers issue, the designer needs to understand that the ultra high-resolution image that they picked for the background is killing the page load times, maybe they need to scale back and optimize that image a bit since the average user will literally give up on your page and leave after 3 seconds! No point in a pretty image if your users ditch you before its even loaded. A good programmer should also understand the need for that pretty image, it's fundemental to the experience of the site, have they considered if they could load a low-res image and then lazy load a high-res image after the page has been rendered so that the background get's sharper and sharper after a few seconds?
See:
Making dollar bills! We need to eat and Mac and Cheese only goes so far! This is the whole point isn't it? We want to get paid and do some awesome work along the way. Let's turn this schooling into a worthwhile investment... but how. Yes good question, I don't know.
After school I got lucky? Or did I? I busted my ass to find work. I networked and participated in tech groups, I exposed myself to people already in the industry (not literally), I made sure that they saw my face, made sure that they knew I was looking for work, that I was hungry, eager, and willing to learn. I got my first job from someone I met in a local tech group called The Web Posse (now disbanded unfortunately), I made my first paycheck, I spent 3 times the amount of time I expected on it but it was a paycheck nonetheless! I found out that one of my neighbours was a web designer, she had recently been disappointed with her developer and gave me a chance, I spent more time on that website than I should've and I ended up making very little, but she had a second job for me and I'd do better on this one! Then a third and a fourth, we became good business partners, I was actually making money now :) One of my instructors from the college ran his own business in town, he started feeding me website builds, it was consistent enough that I could pay my bills... I had become a web developer!
So the moral of the story... get your hustle on!
This is a tough one, you'll have a lot of discussions on this topic. I can't give you a hard number, each of you is different and comes to the table with different strengths. You'll need to find a balance between being attractively affordable as well as making enough for you to not hate your job. We need to feel valued and that can take different forms. Some people will value a consistent and long term relationship at the cost of making a little less. Others want to make more money and don't mind constantly hunting for new work. One thing I did was to sign a contract for a fixed amount, this meant from start to finish I would make X dollars. I guaranteed delivery of the site on that budget, if it took me three times longer because I was a noob then I made less, but that for me was the cost of education, I had no problems swallowing that cost. As I got better at my craft I made more.
For a $1000 build it used to take me up to 80 hours of work, equating to about $12.50 an hour
Now the same build I could probably do in about 20 hours, equating to about $50 an hour
So find your niche, get good at your craft, strive for mastery, specialize, do something that nobody else can do, and you can carve out a place for yourself with the right hustle.
As a freelancer there are a tons of great services out there for getting paid. Some popular ones are:
If the project is big you can consider breaking it out into some smaller chunks, a fairly industry-standard might look like 50% upfront, 50% upon completion or 33%/33%/33%. Find a system that works for you.
Some finer points
- Make sure you save some for those lean months when you haven't been able to find any work
- Put some aside for taxes! Do these quartlery and learn about being a sole-propietorship
- Go find work during your down time. Just because you don't have a current project doesn't mean you're off the clock
- Claim business expenses, talk to an accountant, learn how to keep your books in good financial order
- Get a business number, you might be able to save on cellphone bills, internet bills, etc.
- Being a registered business might make you look more appealing to potential clients
- Self improve, find time to learn new skills, keep current
- Wear real clothes sometimes, don't live in your pajamas, go out and party or hangout with humans once in a while (seriously)
Please! Everyone needs to learn how to use GIT. It is a versioning tool meant to make collaboration easier, it reduces conflicts, and enables you to rollback to specific code changes to isolate bugs in your code. The idea that I would write code without GIT for any of my projects terrifies me!
If you end up working on a team, you will without doubt be working with GIT versioning and coming to a team without knowing how to use it would be a major disadvantage. It would be highest on my list of requirements when hiring someone. Even if you are working as a solo-freelancer having your project version controlled and placed in a cloud repository only has benefits without any disadvantages. If you blow up your computer your project is still safely in the cloud
Excluding HTML and CSS as prerequisites
In my subjective opinion in order of hireability here in the valley:
- GIT
- Javascript
- PHP
- MYSQL
- React
- Java
- Ruby
- System Admin