So you want to be a computer programmer? Want to write software? Here is how you can get started with this awesome hobby / profession right away, for next to nothing. I first wrote this article back in 2008 and a lot has changed since then, so I decided to start it over completely.
Tips for getting started
If I were to narrow down the two things that will ultimately determine your success here it’s this:
1. Don’t get into it for the money. We all know that software jobs pay well. I’m not saying you shouldn’t try to get the best pay possible once you’ve built your skills but if this is the primary reason you want to get into it, don’t bother. There are two approaches to programming:
- I want to learn how to write software to build (blank) or solve (blank) and maybe someday be paid to do it.
- I want to make more money by becoming a software developer.
The first one is really the only way to go. Be honest with yourself about this. Being a developer takes intense commitment, beyond what you imagine going in. There are many skilled professions where you reach “mastery” and you remain employable for decades, even the rest of your life. Software is not one of them. Your base knowledge of development grows and lasts decades, but applicable skills have a much smaller shelf life and you must study and improve your craft on your own time. This takes dedication and passion that money simply won’t provide.
Those who get into it purely for money tend to get disgruntled, fail to keep up with trends or new technologies, and burn out eventually. They also have to constantly compete with those who are truly passionate.
2. Learn from a text editor.
Whether it’s HTML or Assembler writing plain text is the only way to learn and understand what’s going on with the program. You must break out the development environment and start hacking away.
When you learn coding through an IDE (Integrated Development Environment) there are too many shortcuts and auto-completes that mask what’s really going on. You can build things quickly, but you don’t really know what’s happening with it.
Write it out by hand, watch it break, and fix it when it does. It’s worth the time.
I even recommend this for C#/ASP learning. While Visual Studio is arguably the best IDE ever created, it doesn’t help beginners. I learned C# with Notepad++ and csc.exe. Now that I have the experience I use Visual Studio every day, but as a beginner it would have hampered my learning.
Use a text editor first! Then learn the IDE. You’ll thank me later.
What do you want to build?
This is the first choice you must make when approaching development. You don’t have to stick with this choice forever but you have to start somewhere. Here are some of the categories of software development, and you should start with which ever one you’re most excited about:
- Web Development
- Desktop Development
- Mobile Development
- Server Development
These can be broken down even further, and there are always niche categories such as BIOS programming, data processing and other specializations. But these are the areas I’m going to tackle in this series.
Part 1: Web Development
Ok, time to make another decision! There are a few basic routes you can go. You’ll need to decide which stack you’ll be going for (at least at first)
- Linux Stack
- Microsoft Stack
There are advantages and disadvantages to both, which I will outline here.
Then you must decide which are of web development you want to focus on, at least at first.
- Frontend Web Development - Pages, Design, GUIs, the stuff you see
- Backend Web Development - Databases, APIs, behind the scenes stuff.
There’s no reason you can’t learn Frontend and Backend on Linux and Microsoft stacks, and in fact you should. But it will take a considerable amount of time to accomplish this so it’s best if you pick one area and focus on that first.
Backend (Server Side) Web Development
The Linux stack is a set of technologies generally used on the Linux operating system platform. Though these technologies will all run on Windows as well, they’re generally better supported on Linux hosting and have much better tooling and debugging in Linux environments.
You don’t need to run Linux on your development machine to write software for it, but it does help. Give it a try!
Advantages of using the Linux Stack
Everything is free - Other than paying for hosting (which you may not even have to do that) these tools are free. Many of the tools you use to develop on them will also be free. This is great when you’re just getting your feet wet in programming.
The Linux Developer Community- Linux is the OS of choice for many developers, and they are passionate about development and helping others. For those just starting out, you’ll find a ton of activity in this world and lots of help online.
It’s open source- Most of the projects you’ll find on Linux are open source, meaning you can dig into the code and really see how it works. You can make changes to it, fix problems and share source code freely on the internet. This philosophy has drastically changed programming and made software far better.
It’s Fun- Though I’m a Microsoft .Net developer for a living, I still use Linux all the time. I’m writing this in Arch Linux on my laptop. It’s because I’m a constant tinkerer at heart and I love to change and tweak everything. I also love to optimize my environment for peak results. You can squeeze a lot more performance out of your hardware with Linux.
Disadvantages of the Linux Stack
Many large companies use the Microsoft Stack - The Microsoft .Net Framework is a robust, mature, and stable platform for development. It also meshes well with other Microsoft products, so it’s used heavily in the business world. If you work for one of these companies or want to work for them, if they’re primarily Microsoft your Linux skills won’t be very helpful. But don’t give up yet, there are many large companies using Linux as well, or a mix of both.
Fragmentation - The downside of everyone doing their own thing is that it becomes fragmented. Certain technologies mesh well together, and some don’t. What might be a standard way of using a piece of software can be far different from others.
Abandoned Projects - There are many abandoned projects in this realm because people will group together to work on something and get bored, there will be some infighting, or there will be a lack of interest by the community. When this happens, the software is dead. If something is useful and good someone may pick it up or fork it but there are no guarantees. Remember these people are working for free!
Lack of Documentation - This is something that seems to be improving by the day. But there are some projects that lack good documentation and it’s a struggle to get things working. Again, these people are doing this for free and you didn’t pay anything so you can’t really expect support. You can help, however by sharing everything you learn about it.
Sometimes things just don’t work - You’ll find software packages that don’t work or they are missing key features. Since there is no commercial backing, there may be less motivation to fix it. If you’re an edge case and you have a special need there may not be enough demand for anyone to care. This is an opportunity for you when you become a better developer, as you can pitch in to fix things or add features.
This includes too many platforms to list them all, but it’s mostly
These are the predominant web languages on the net, and they are all awesome in their own way. All of these languages are relatively easy to learn and have great resources for doing so. They also offer great frameworks when you’re ready to build large scale applications.
Where to learn PHP:
Where to learn Python:
- Beginners Guide to Python
- Learn Python the Hard Way
- CodeAcademy Python Tutorials
- Pluralsight Python Courses
- Python from Scratch at Tuts+
Where to learn Ruby:
- Ruby in 20 minutes
- Ruby Monk
- Pluralsight Ruby Courses
- Ruby for Newbies (Tuts +)
- Learn Ruby the Hard Way
These are just a few of the languages in use, but the most common. Pick one you feel comfortable with and find something to build with it! The more you build, the more you’ll learn along the way and run into problems which will help you learn even more.
The Microsoft Stack is an organized ecosystem revolving around Microsoft products. But that’s not such a bad thing as I’ll explain. It is a true ecosystem in that everything is designed to work together, and for the most part it does. It consists of:
- The .Net Framework
- ASP.Net (combination of these technologies
Note: While ASP.Net is now incorporating other languages, such as all the languages above (PHP, Python, Ruby) for the most part right now the majority of Microsoft web development still revolves around the technologies and languages listed above.
Advantages of the Microsoft Stack
It’s backed by a large, successful company - We all know who Microsoft is, and whether you love them or hate them they’re pretty successful. That means they have a lot of resources and talent to throw at this stuff. In recent years there has been a huge push to get more developers in this realm and the improvements are astounding.
It’s an ecosystem - many developers argue whether this is a good thing or not, but this environment is very interconnected and everything is designed to play well together. There are set standards and best practices, and an established way of doing things that you don’t find with a more fragmented environment.
Big business loves it - Backing from Microsoft, solid standards, and reliable structure attract big business to the .Net ecosystem. Many companies like the fact that you can rely on this technology and help is a phone call away. They also like the fact that Microsoft’s reputation is liable when releasing a product so in most cases it tests things very thoroughly before they’re released into the wild.
It’s very solid - There are faster and more scaleable platforms in the Linux world for the price, and development itself can be faster but .Net applications are rock solid when built correctly. Things like strong typing, excellent debugging and profiling tools, picky compilers, and a vast knowledgebase contribute to quality software that people can rely on. You can build just as solid software on Linux, but .Net development pushes you to build great code by default. You have to try harder to build sloppy software on this platform.
The Tools - The tools are ridiculously good for .Net development. The Visual Studio IDE is unmatched in my opinion for a development environment. Debugging and profiling tools help you squeeze every bit of performance and security. And hobbyists can get express versions of these tools for free.
Disdvantages of the Microsoft Stack
It’s backed by a large, successful company - There are disadvantages to an ecosystem being built around a company and some of those do surface here. Often times projects that don’t get adopted enough to generate numbers die a quick death. Some things are done in the company’s best interest and not every programmer agrees. Some think Microsoft is evil and it’s not as popular with the younger, hipper programming crowds.
It can be expensive - Running a Microsoft shop has a lot of advantages, but it doesn’t come cheap. This can dissuade a lot of smaller companies and startups from using it. But this disadvantage is being rectified with a little known program: students can get software free through Dream Spark and startups can use BizSpark to get software for free.
Web Hosting is not as common - You can’t throw a rock without it hitting a Linux based web host, but good ASP hosts are much harder to find. If they do host ASP it’s either more expensive or outdated and neglected. I’ve been hosting with Arvixe .Net Web Hosting for over a year without any of those problems. But they are a diamond in the rough.
It’s harder - You can grab a quick book on PHP and slap together a website in a couple days. That’s great for your personal blog or a recipe site. In ASP there is a lot more to learn and it’s lot more finicky. Not only is there a lot of aggregate things to learn, but the environment is much more strict, so you need to learn it well. Also you have to incorporate a lot more Computer Science related thinking to what you’re building. This isn’t exactly a bad thing but it can be daunting for beginners.
So you still want to do it? Keep reading!
How to learn ASP.Net
ASP.Net is the combination of Microsoft languages and technologies related to the web. Funny enough, the website ASP.Net is a fantastic resource for learning the ropes. But here are a few other places you can go to learn more.
Where to learn C#:
- C# Station
- DotNet Pearls
- C# Courses at Pluralsight
- 30 days to learn C# at NetTuts
- C# at TutorialsPoint
- C# Tutorials on MSDN
Where to learn F#:
- Try F# Here ( By Microsoft )
- Building your first F# Application
- Tutorials from the F# Foundation
- F# Tutorials from Pluralsight
Where to learn TypeScript:
Where to learn VB.Net (If you must)
Frontend (Client Side) Web Development
Here’s what you’ll need to know:
Where to Learn HTML 5
- HTML 5 Course at CodeAcademy
- HTML 5 Courses at Pluralsight
- HTML 5 and CSS 3 at Tuts+
- Tutorials at HTML5 Rocks
- HTML 5 Canvas Tutorials
Where to Learn CSS 3
This just scratches the surface of what comprises frontend development. There are being strides made every day, and many frameworks are being developed to make frontend development for Web and mobile devices more powerful than ever.
General Programming and Development
For general programming and development knowledge, the following sites are great for getting a nice foundation in software development.
- Code School
- Code Academy
- Team Treehouse
- MIT Open Courseware
- Tuts +
- Mozilla Developer Network
- The Code Player
- Khan Academy
I hope this has given you enough information for getting started in computer programming. I’ve been doing it since I was a teenager, and I get paid to do it now and it still seems like I’m just having fun. It’s a very rewarding and challenging field to get into.
You might be asking: why on earth are you doing this and creating competition for yourself? I’ve been asked that several times about this blog in general and the answer is simple: there aren’t enough of us. Developer jobs are increasing faster than than amount of people who can fill them. I see this as an opportunity for people to better their lives, especially in developing countries so if someone is interested in being a developer, I’m more than happy to help them out.
Let me know what you think in the comments, or contact me.