As I am growing in the world of software development, it's becoming more and more clear that the experience is completely different for everyone. Sounds like it should be common sense, right?
But here's the thing...it's not! I've spent the last year researching and learning as many javascript topics as I could shove into my head, and I've started noticing a pretty large misconception shared by many blogger-developers. I bet you've noticed the same thing - how many times have you seen someone say "All you need is working knowledge of HTML and CSS to start your design or development journey!" or "I've known many people who have made a career using just HTML and CSS!"
That's just not quite true...
"...Using Just HTML and CSS"
The only way that you'll be able to use just HTML and CSS to create a career doing freelance development would be to specialize in it. While there is nothing wrong with that in general, it will shut a lot of potentially lucrative doors for you.
That's just not quite true...
By specializing, I mean only doing HTML/CSS work. That means that any time you need any functionality like what Javascript provides, either you will have to hire a developer, or your client will. Either way, that's money out of your pocket. Some people are ok with that - I'd rather keep as much productivity as I can provide one of my customers in-house. This will maximize customer satisfaction, as I then have control over quality and can guarantee consistency across the entire project; if I were to outsource 3/4 of the same project to provide javascript functionality, get the backend built, build an API, make sure everything communicates, deploy, set up NGINX, and set up SSL, I've lost thousands. Not to mention, unless you have good working relationships with every one of the subcontractors that you hired for all of the above steps, you can't guarantee that they will exercize the same care of your project as you did.
The Better Option
In my humble opinion, it's a much better option to really deep dive into your functional language of choice (mine's obviously Javascript), and create and deploy your own website. I suggest deploying multiple different ways; Netlify/Heroku/Zeit Now to start, then moving to a VPS (or virtual private server) like DigitalOcean or Linode.
JAMstack Deployments
Heroku, Netlify, and Zeit are examples of JAMstack deployment. JAMstack stands for Javascript, APIs, and Markup. With most of these, there will be a command line tool to allow for quick, one command deployments from the command line. How cool is that? Trust me when I say the learning curve for these tools is not steep - the first time I deployed to Zeit, which has recently been rebranded to Vercel (you can find the docs here) using it's now
command line tool, it only took a few hours to figure out. Hours, not days. You can also hook these up with Github Integrations so that your site will rebuild on subsequent code pushes. Check it out, now your doing CI/CD like a true DevOps engineer 😉
DigitalOcean Deployments
My favorite way to deploy my sites is through DigitalOcean. DigitalOcean provides a VPS service that is incredibly easy to get rolling. VPS solutions differ from JAMstack by building a completely private server instance within a cloud server(for DO, this is called a "droplet"). This means that you are not limited in the technology and softwares you want running on your servers!
For $5/mo, DO will partition you a Linux server instance, running whatever distribution you want, on a single virtual core, with 25GB SSD space and 1GB RAM. Pretty impressive, for the amount of versatility you receive - you can access the new server by simply running ssh <your-droplet-ip>
in your command line, and boom, you're in! And when I say you're in, I mean you have now remotely accessed your private server, and are now free to install whatever softwares and technologies you'd like! How cool is that?!
DO's pricing plans run up from there, but I still haven't found a need to go over their $10/mo plan for anything I've needed. If you'd like to give DigitalOcean a shot, you can use this link to get $100 free credits! Tell me you can't figure out how to use it with that deal, you won't even have any skin in the game!
DigitalOcean has a slightly steeper learning curve, as you will be using a Linux system via the command line. There are many resources for doing this online, and I will also be writing an article detailing how to set up your first droplet soon!
Taking it a step further
There's always more to learn - after you have your application running on whatever medium you choose, it's then time to take charge of your domains, set up SSL, and set up reverse proxies and load balancers. I know this all seems like a lot, but don't despair. If I can do it, you can definitely do it! One of the biggest skills a developer can have is the ability to search the web for answers to your questions, so when you get stuck, whip out the old Google and start researching!
Another hint I can give is keep notes the first time you work through anything you haven't done before. This will make it easy to reference later for steps to duplicate, and/or figuring out better ways to do things.
Here's What I'm Saying
Basically, don't stunt yourself by just being satisfied learning one, or two, or even a few, different things. Continue to challenge yourself, continue to move forward, and learn something new every day. After awhile, you'll be able to decide what you really don't want to work on, and outsource just those little pieces. This approach will maximize the revenue that you'll be able to keep in your pocket for each project, rather than having to shell out for things that you never took the time to learn how to do.
Do you have any thoughts or opinions on this topic? I'd love it if you shared them in the comments - I'm sure I'll be able to learn something from you, too! If you're interested in the work I do, or maybe want to hire me for an upcoming project, jump on over to my website and use the contact form there!
Hope everyone's having a great day! Get out there and learn something new!
Top comments (0)