Learning to program can be tough. Real tough. There are many hard to answer questions out there like what language to learn, whether or not you should learn in an IDE or a command line, and what resources are best for learning.
I can’t answer those questions any better than the last “expert”, but I can give you some tips that I discovered on my own journey to becoming a developer to help make the beginner stage less painful. Here’s my list of things I wish I did when I started Programming.
1. Learn Git
When I first started learning how to program I would see mentions of what’s called version control in many of the articles I’d read. I honestly was fairly confused on what it was, and I was so busy trying to learn programming that I never really devoted the time to learning what Git or even what version control was.
This is something I really wish I did right from the get go. Learning Git really only took a four-hour session of reading a few tutorials, watching a video, and scribbling some notes down in a notebook. I’m still no expert, and there is a lot more to Git than the features I use. But I know the basics, and it’s enough to keep my projects more organized than I would otherwise be able to.
The purpose of version control software like Git, is to keep a record of the changes in your code. It allows you to revert to different states in case you mess something up really bad, and want to go back to a time when it worked.
Do you ever have an idea pop into your head, and not know for sure if it will work? Git allows you to branch away from your project and experiment without changing the original code. If it works, and you like it, you can merge it to your original code base.
It’s a really nice tool to use, and it takes way less effort to learn than I originally thought. There is also a hosting service built around the use of Git called Github, which we will look at in the next point. If I had been using Git and Github from the start, I can’t even tell you the headaches and heartaches that could have been avoided!
Here are a few links:
What is version control? https://en.wikipedia.org/wiki/Version_control
What is Git? https://en.wikipedia.org/wiki/Git_(software)
The best book on Git (free): https://git-scm.com/book/en/v2
Download Git: https://git-scm.com/downloads
It doesn’t take long as a beginner to at least hear about GitHub. It’s plastered all over programming related sites on the internet.
For the un-initiated, GitHub is a hosting service for version control repositories (which is just a project) made with Git. At least that’s the short of it.
Basically, it allows teams to share code with each other over the internet. One of the great aspects of GitHub and other lesser known but similar services is that many developers host their code openly for the public to see. In fact, GitHub specifically is public by default.
This makes it a great place for coders around the world to participate in open source projects, or for beginners to get a feel for what real world development entails.
The problem, however, is that when you first start out you have no idea what any of it is about, no idea how to use it, don’t fully understand what it’s really for, and if you start digging through source code your eyes bleed and your soul is set on fire.
Dramatic yes. But it’s the truth. Signing up for GitHub as a total noob to programming is easy, but to actually use it is another.
My advice is to schedule any amount of time in your self-studies to figure out what GitHub is, and how to use it, along with Git – the version control utility that syncs your project with GitHub.
It’s going to be tough in the short term, but once I finally became a “Githubber” I wish I’ve been using it from the beginning. Not only does it help you become a better developer, it also builds a profile that can be shown to employers – becoming a resume of sorts.
If you don’t already know what Git, or Github is, I suggest taking a quick read. It also doesn’t matter if you decide to use a different hosting service or version control software – there are of course others out there to choose from. Git and GitHub are just the most popular and I see Git on almost every job description.
What is GitHub? https://en.wikipedia.org/wiki/GitHub
Learn how it all works: https://help.github.com/articles/set-up-git/
Sign up with GitHub: https://github.com/
3. Stack Overflow
If you have been programming for more than a day, you’ve probably found a website called stackoverflow.com – you should sign up.
Unlike Git, and Github, this takes no real investment to learn. All you have to do is sign up and read their guide for asking and answering questions. Which that’s all the website really is.
Stack Overflow is a place where people can post questions about problems they are having with their programs and anything else programming related. It’s a service that I used right from the beginning and still use it constantly today.
However, it’s only recently that I decided to actually set up an account, which in hindsight would have been a good thing to do right from the start.
I highly suggest making an account on this website even if you feel like you have no good questions to ask that haven’t been asked already. It also seems pointless when you know you can’t answer any questions as well as experienced members on the site. But I promise it’s a good idea.
A good habit to get into is to visit Stack Overflow and search any questions related to whatever programming language you’re learning. Although it’s rare, even as an absolute beginner you will eventually find new questions that you know the answer to.
Doing this even just once a week, or every few days if you can, will build you a reputation on Stack Overflow. This reputation is represented by an actual number that creates a metric which some employers look at when searching for new employees.
So if you can start on your reputation now, by the time you get to where I’m at, you’ll have a nice solid number to represent the knowledge you’ve gained. When a Stack Overflow reputation is high enough, I’d say it’s worth putting on your resume and LinkedIn account.
4. Code Pen / Fiddle / Clould9 etc
Much has changed since I first started learning how to code. Nowadays, I think, almost everyone knows about cloud IDEs and free hosts. But if you don’t, you should check out sites like codepen.io, jsfiddle.net, and c9.io.
These services only apply to you if you’re learning web development which is one of the reasons I write about why you should start with web, here.
But if you are learning web development, you should definitely check these sites out. Codepen especially is great for creating a portfolio for yourself.
This is a strange one because I’m guessing not many people view twitter as relevant to programming, but it really is.
I’m one of those late twitter conversions who never understood the point of it. The advantage of using twitter is following content related to whatever your programming interests are.
Of course, you can do this on Facebook too, but companies, individuals, and services are usually more active on Twitter. It’s also not as flooded with comments, in most cases, so I find it’s the best place to get in contact with somebody from the accounts you follow.
Using Twitter has helped expose me to a lot of new information that I might not have otherwise found without it. It has also assisted in developing my online platform which will be the next point. Blogging.
6. Build a Platform / Blog
This list isn’t really in any particular order of importance. I’d argue that every point on this list is equally important to do for beginners or even intermediate programmers.
However, if I did put a priority on any point in this list, I think this one would be it. The only one I’d maybe hold above starting a blog is finding a mentor.
Building an online platform where you can voice your opinion, and share information that you know is essential in developing a career in the tech industry.
Whether it ends up being a successful blog, or just a place on the internet to show off works that you’ve done, it literally becomes your resume.
This is something that I think should not be a little side project either. You have to take it quite seriously because it’s going to become the first impression of potential clients, or employers. It’s through your platform that you’ll be communicating who you are as a professional and explaining why on earth anyone would ever want to work with you.
The other great benefit of blogging is that you also learn so much. Taking the time to really articulate your thoughts and communicate your ideas helps to strengthen your understanding of what you know.
You also get exposed to information from people emailing you, and sharing their own opinions – it’s great!
A few suggestions
WordPress is what I currently use for this blog. I think for a lot of people it’s a solid idea. It’s pretty straightforward to set up and it allows you to focus on writing content rather than developing a website.
You can get started for free with a wordpress.com account, but if you want your own domain name, you’ll have to pay up.
I actually host my own installation of WordPress on a shared hosting plan. When people say they are a WordPress developer they mean they work with wordpress.org sites.
Doing what I do makes sense if you want more control of your website.
Another option that I think is a good idea, especially if you don’t want to build your own website, is Medium. It’s become a pretty popular platform for developers and it’s nice and simple to get started.
7. Find a Mentor
I say this to a lot of people when they ask me for advice. Find a mentor.
I think a lot of people get confused and they assume that I mean through an actual mentorship program.
Not that there is anything wrong with going through a program, but what I mean to convey, is to find someone at least slightly more experienced than you are, to help you out when times get tough.
This can be a friend of yours who is already a developer, or someone you meet at a developer conference/meetup or even someone you meet online.
The point is that you should be surrounding yourself with people who code and are interested in working on the same things you are. You will grow so much faster and much more efficiently with even just a little guidance.
8. Be a Mentor
While finding one or two people you can rely on in dire needs of help is important, it’s also important you make the effort to reach out to others who are newer to all of this than you are.
One of the best ways to learn something really, really well is to teach it to someone else.
When you have to explain something you know to someone who doesn’t understand, you often will find holes in your own knowledge. This is a good thing. It will motivate you to go out and correct your misunderstanding through research or experiments in order to help the person you are teaching with their own learning.
Not only will teaching others help you to learn, it’s also doing a great service to the developer community by disseminating information – win win!
9. Free Learning Resources
In 2017 this should be an entire list of its own. It is an incredible time to want to become a developer. When I started, we were just on the cusp of this utopia of free, quality information. Now we right in the middle of it.
Since I used to work here, the first resource I’ll share is Khan Academy. Not only can you study computer science and programming for free, there are thousands of videos and quizzes for many other subjects including math as well.
Despite what a lot of blog posts may say, being strong in math is important as a developer, so Khan Academy is a great resource for sharpening those skills. Although it also has a decent CS and computer programming curriculum, one downside is that the programming courses are geared toward a younger audience. If you’re 12, this is perfect for you! If your 40… maybe not so much.
What I usually suggest to new developers is to try freecodecamp.com. In my opinion, it’s the best way to get started with development today.
10. Stick to One Technology
This is a technique that I really struggled with when first starting out. When I started learning how to code, I really had no idea what that meant – I thought I did, but I didn’t at all.
I sort of just jumped in and started out with tutorials I’d find on YouTube or random sites as the result of a google search. This lead me to a big problem.
As I started learning things, I was coming up with my own ideas of games and apps I wanted to build. So I would start in the language I was currently learning at the time, and then get stuck.
Once I gave up trying to figure it out on my own, I would go seeking a tutorial that might give me the answer to my problem. Often the best tutorial I would end up finding was in another language. So I would follow along with the tutorial series, and dive into whatever language and IDE was being used, just so I could learn how to do this one certain thing.
Because of this poor learning strategy, I ended up jumping around from one language to another before ever learning a single language in full detail.
The problem is that my progression was too slow. I was always relearning beginner things, that I had already learned in other languages, rather than advancing my understanding in just one.
My real progress as a self-taught programmer didn’t happen until I stumbled on XNA (a framework for making games) development using C#. I found a wealth of knowledge and community support, as well as working projects I could download and learn from.
So I just ran with it. Through XNA, I was inspired to learn the core C# language, and I began doing that in conjunction with the game development that I was learning.
I finally started learning, for the first time, intermediate level development topics, rather than going through beginner lessons over, and over again.
I don’t use C# anymore for a number of reasons, none of which have anything to do with my like or dislike towards the language. I’ve just sort of gone on to other opportunities and interests.
But because I finally stuck with one technology (that being C# with the XNA framework), I was able to transfer those skills more fluently over to other languages and frameworks.
To be honest I still struggle with sticking to one thing and it’s a constant effort on my part to stay focused. I think all developers – even professionals – can relate to this. But in my experience, the more you stick to one language the stronger you’ll become as a developer.
11. Learn Skills Simultaneously not Sequentially.
Wait, what? Didn’t I just say to stick to one technology?
Well yeah, sort of. The thing is, a programming language isn’t the only tool you’ll be using to write software. You’re likely going to be using things like a text editor like Sublime, or Brackets – or an IDE (Integrated Development Environment) such as Eclipse or Visual Studio.
You should also be using some sort of version control like Git, and hopefully, you’re sharing those projects on GitHub. If you’re in web development you’re likely going to be using package managers, and build tools. Maybe a web server, and a database.
All of these facets of your workflow are separate skills, but they are not mutually exclusive.
They are all skills that if possible, you would just know at once, but it’s not possible. So you have to find other ways of getting to that level as quickly as you can.
The strategy is really simple. You learn something trivial and basic in one topic. Then you do the same with the next thing, and so on, until you come full circle to the first thing you learned, and repeat.
Example: If you are learning Python for your first programming language, the first thing you will likely do is follow some instructional tutorial that gets you to have Python running on your machine and print the words, “Hello, World!”.
Once you get there, you’ll learn some very basic things about what a programming language is, and how to do some simple things like defining variables, using control structures, and functions.
And once you get to the point, where you’re experimenting and making simple programs on your own, and you’ve completed at least one tutorial or course, it’s probably a good idea to learn a few things about the text editor or IDE you are using.
Knowing your development environment is a skill you’ll have to develop over a long period of time. By learning a few things after you have a basic grasp of your programming language, you’ll be able to apply some of those things to your current works.
It could be as simple as learning a little bit about the de-bugger or even just customizing the layout a bit to suit your personal taste or preferences.
Once you have a basic grasp of your IDE and programming language, you should learn Git.
The sooner you learn Git or some other version control the better. It’s going to save you a lot of headache in the long run.
It can be intimidating to beginners at first – I know it was for me, and that’s why I avoided it longer than I should have. The thing is though, you really only need to know a few basic commands to use it. Anything else, you can just google.
Finally, after you now know how to write simple programs, you are feeling slightly more comfortable in your IDE, and you’ve succeeded at initializing your first git repository, you should push your project onto to GitHub.
Once you get to that point, you go back to learning more Python, only this time, you keep using the other technologies you just learned. So no matter how small your program may be, you’re going to use Git, and you’re going to make a repository on GitHub (you can always remove them later if you’re not keen on filling your public repo with “Hello, Worlds” and star pyramids), you’re even going to leverage a few of the extra features you picked up in your development environment – text editor or otherwise.
This is the learning cycle that will give you the best results, because each new thing you learn, you are continuing to connect to other things you’ve learned along the way.
Of course, this concept is not new, albeit non-traditional. It’s called cyclical learning, as opposed to the linear learning you’re often exposed to in school.
If you’re interested in this style of learning it’s worth checking out Kolb’s experiential learning theory.
12. Meet-ups & Networking
I can’t express how important it is for newcomers in the industry to get out and network.
When I was a newbie myself, I was too intimidated to leave the comfort of my home and go out to a developer meetup. I was scared of seeming stupid or out of place.
The truth is, I should have made it out to meetups from the start. I’m from a small town and had no friends who were programmers when I started. Isolating myself from developer communities in the larger cities nearby was a huge mistake, and it slowed my growth.
One issue is that without meeting people who are already in the industry, it’s difficult to understand where you think you want to be. How do you know for sure that you want to be a game developer when you don’t know any game developers? Or web developers? Java developers etc…
You have to get out there and meet other people who are in the industry as full-time developers. An extra benefit is that you’ll also likely meet other people like you who are still waiting to get that first job.
Meetups and conferences are where you’re going to get the exposure you need and make the connections you need to actually start your career. It’s very difficult to do that from behind your desk – no matter how active you are online.
13. Paid Courses
Today in 2017 there is so much amazing material out there that is totally free. However, there is still something to be said of paid courses as well.
Generally speaking, things that you pay more money for are usually higher quality than the things you pay less for. Not always true, but when it is, it’s very true.
The thing is, creating content for learning takes a lot of time and a lot of skill. When the creator isn’t making much – or any – money at all, it’s hard to push out high-quality content. And when it is high quality, it’s often not complete.
A paid course through Udacity or Udemy, for example, will usually cover a topic in much greater detail than any free lecture, video, podcast or coding site ever will.
For courses that are truly worth the money, you’ll get something that has been well reviewed, edited and is continuously updated. You’ll also get the benefit of asking the creator for advice and feedback when you have problems following along.
But there is another benefit to paying for a course too.
It’s the extrinsic motivator that you get from spending real dollars on something. Until you actually invest in a course, a book, or a monthly subscription to Treehouse, you are not taking your learning as seriously as you could be.
Normally you’ll hear that intrinsic motivation is the key to being successful at anything – and it’s true! But you need extrinsic motivators as well.
Learning to program is not easy. And in the beginning, those intrinsic desires to create the next Facebook or Snapchat quickly begin to fade when you’re faced with constant challenges and push-back from the universe.
During the dark times, it helps to have any motivators at all even if they are only extrinsic. The thing is, money is a major motivator for us. Even when we don’t feel like going to work, we usually do – just because we need money.
When you’ve invested your hard-earned cash into learning something, you’re more likely to keep yourself motivated when your heart simply isn’t into it.
Then eventually you’ll battle yourself through your temporary lack of ambition, and feel all the love from your intrinsic motivators again after you realize you might be able to make Facebook after all!
On the same point of creating that extrinsic motivator: It doesn’t necessarily have to be through buying a course or a book or anything like that. It can be as simple as buying a hosting plan and a domain name for yourself.
It’s about making a real commitment beyond just an investment of time. It’ll not only give you that extrinsic factor, but it’ll also change your mindset. Getting paid to code won’t feel like something that might happen one day if you keep working at it – it will happen, and that’s a good feeling 🙂
More To Come
This list of things I wish I did when I started programming is not completely exhaustive and it’s always changing as I move forward in my career as a developer.
I hope to continue to add to, and update this list over time with resources that are relevant to the times – this industry changes so often and so fast, it won’t take long for some of these points to be obsolete.
If you made it this far, I’m assuming you must have enjoyed the read. Please don’t forget to share this with one of the buttons below.
If you have any points you feel I forgot to mention, bring them up in the comments!