This guide will aim to answer most of the Frequently Asked Questions once someone starts programming, ranging from projects, competency, time, and language. This is by no means a complete guide, and I encourage other users to contribute what they found helpful as well. This guide will not focus on a particular language.
I’ve added hide tags in most questions that explicitly have links. There are no direct downloads for books and courses, but I do mention places where I like to get things from for free. Use those sites at will and at your own risk.
Written by Unknown & Released under the Creative Commons Attribution/NonCommercial/ShareAlike license (CC BY-NC-SA)
Before anyone starts programming, they need to run themselves through a few questions first.
Q: What language should I choose?
A (short) : Any of them.
A (long): It really depends on what you’re trying to make. Are you going to make a website? Maybe you’re planning on making a game cheat. Perhaps you’re just looking for something to make your life a little easier doing mundane tasks all day. Or you’re planning on making some kind of malware and you really want to understand everything that a computer can do. That being said, all of the above tasks have some degree of a learning curve on top of a respective language. Since all programming languages tend to follow the same set of rules logically, learning one language will make it a hundred times easier to learn another language later on down the road, and switching around like that will take maybe a few hours, since you’re just learning the syntax.
Q: So where can I learn about languages and their uses?
A: Google for how to choose a language. There are tons of flowcharts available, and there are even more blog posts and articles from your favourite developers online about different languages and why they love them. But don’t take someone’s word for it. Go a little deeper: search for why certain languages are used over others in specific cases. If you don’t understand the explanations, google the words you don’t understand. Learn as much as you can, and eventually, once you found something cool, keep it in mind as your starting language.
Q: Where can I learn a programming language?
A (short): Anywhere you, please.
A (long): You already know about books. You see them recommended to you on Amazon, or facebook ads, or anywhere else. You’ve probably scoured through YouTube tutorials, only to realize that 95% of them are ‘taught’ by Indians whom you can’t understand, and that you can smell the curry through your screen. You’ve looked at Udemy and thought ‘Wow! Cool, a full course that teaches me everything!’ and then realized that you needed to pay at least 10-15$ to get access, and realizing you’re broke, you ditched the idea. To put it simply, all the above-mentioned places to learn will be teaching more or less the same thing. There’s no ‘best’ option, it depends on how you learn. I personally can’t understand thick Indian accents, and I don’t like paying, so finding PDFs of programming books is the way for me to go. But maybe you’re fluent in Hindi and hear the accent all day every day, so a YouTube tutorial will be fine. Who knows?
Q: Where do YOU find books?
A: That’s a little personal, I don’t claim to be some God-Gifted programmer like Terry Davis. That being said, I do have a few favorites:
Library Genesis (Has just about everything, as long as you search for it.)
free-programming-books.md (Mostly free-domain books, but a decent starting point.)
Google (just search for the name of the book followed by “filetype:pdf” [no quotes])
Amazon/Apress/Packt(Plus) (If you’re feeling rich, or just want to know what’s out there.)
Humble Bundle (Has good programming book sales all the time. You might find something interesting for very cheap.)
If I can’t find something for free, I generally just try to find something similar to learn from. LibGen has pretty much everything though, at least in older editions if not the absolute latest and greatest.
Q: What else do I need to start?
A: Your brain. In most beginner books (ie. beginner to pro, learn X in Y days, etc.) the book will walk you through any additional setup you need. All you need now is the dedication to the task.
Staying On Task:
I feel the need to include this section in paragraph form because IMO it’s the one thing that always holds people back from actually getting anything done while learning to program, or what to do once they learn to program.
The easiest way to stay on task when learning is to have a goal in mind.
I don’t mean ‘My goal is to learn C# in 21 days, just like the title of this book!’
Think beyond that. Why are you learning to program? What are you trying to accomplish? Why are your choices thus far going to help with your goal?
While considering your language above, I mentioned that you should choose a language based on what you want to do. I hope you didn’t answer with ‘for the sake of learning programming, so I shall choose an easy language.’ If you did, you’ve already failed and you’ll never be a good programmer with that kind of mentality. I suggest you close this browser window and contemplate your life, and what made you this fucking stupid .
Maybe you answered with ‘making a website!’ That’s cool. Now, we’re going to break it down a lot more than that. What kind of website do you want to make? A social networking site? Maybe a dashboard for everything happening in your life? Maybe you have a revolutionary business idea and don’t want to pay a programmer, so you’re going to write it yourself. That’s all fine too.
Take it another step further. What exactly is your site going to do? Generally, programs automate tasks that you can already do by hand, but would just be too lengthy, too repetitive, or just too boring for you to do yourself. So whatever you’re planning on making, come up with a rough idea on how it’ll work. If you’re going to make a social network, then you’ll need some basic functionality, like registration, logging in, maybe messages, or a way for people to post stuff. You’re not just making a home page here.
Now that you have something in mind, keep it in mind while you’re working on something. Maybe during your book chapters, youtube tutorials, or Udemy lessons, you’ll realize that you’re learning something that might be helpful. After each one of those lessons, take the time to think about where you can apply what you learned to your project. Maybe you learned about databases in your lesson, and you realize that you could store your user data for your social network in a database.
Each time you find something useful, write it down, along with where it can be used. Soon enough, those lines will be filling up, and you’ll not only be motivated by the fact you’re learning things, but also by the fact that you’re getting closer to knowing what you need to know to accomplish your goal.
Congratulations! You made it through your course/book/tutorial series! And now that you’ve actually sat down to try and work on your project, you think that you don’t know anything, or that nothing that you learned could be applied anywhere.
Take the sheet you’ve been writing on out. You have been taking notes already about how you can apply things. Surely, at the end of your big course/book, there was some sort of final project that was decently sized. You already sort of know-how to organize things. Don’t sweat functionality too much, just focus on making trivial things work. Set up that database, and make some code that stores data in that database. Once you get that working, add something else to it, like the ability to take in user input like a username and password. Work your way up from the absolute basic parts of the program.
Q: All the tutorials teach the same thing! Where do I learn useful stuff?
A: Even now you’re realizing that what I said about all materials being the same. The only way to go from here is to practice things on your own. That project helped with your motivation, so now try to put things together and make it happen, even if it is really basic.
Q: Where do I find more problems to practice with?
A: I have a few favorites:
ProjectEuler: Very math-heavy, most solutions you won’t be able to come up with a solution by hand. Put your skills to the test and work through the problems yourself. Congratulations if you can make it through the first five on your own (no cheating!)
AdventOfCode: Gradually increases difficulty, but you can try the problems from past years as well. The event itself happens from Dec. 1-25, so if you want to participate, that’s your chance.
DailyCodingProblem: This is an email newsletter, and it gives you a problem along with its difficulty every day. Unfortunately, the solutions are only available if you pay, but it’s a solid service just for finding all sorts of problems.
HackerRank: Competitive, and generally a bit more advanced. But if you get through a few of these, you’re golden.
The 4Chan /g/ Programming Challenge list v4.0: These are a lot more practical for you not only to get good at programming, but come up with useful things.
If all else fails, just read more books and once those books give you an exercise, solve it before reading onwards for the solution.
Q: Project Euler is too hard and I can’t figure out how to do Fibonacci sequences! Where can I learn?
A: As I said, Euler is very math-heavy. That means lots of logic and algorithms to get you the right output. So, start learning about algorithms and math. My favorites are
‘Cracking the Coding Interview’ and ‘Introduction to Algorithms’ and a Udemy course, aptly titled ‘Introduction to Algorithms and Data Structures in C++’.
Q: Wow, those are some cool books! But I still can’t come up with solutions to the problems they pose without looking at the solutions pages. Now what?
A: Your mindset is wrong. Especially the Udemy course, it’s not particularly difficult as long as you have competency in the language. Most of the problems in the course can be solved in 50 lines of code or less (in C++ at that, including whitespace between functions, methods, structures, etc.) At this rate, the best book I can recommend is
It doesn’t just go over problems, but it also covers how to tackle problems, break them down, and come up with new ways to think about the problems in order to solve them. Get through this book and you’ll be sure to start being able to work through something. Take another whack at Euler.
Q: Algorithms are cool and all, but I still don’t know what a Fibonacci sequence is?
A: You need math now. Sorry, I can’t help you here. The easiest way is to just take a few math courses in uni, or do pre-calc in summer school or something. You can get textbooks online at the above mentioned sites, though, if you want to try learning it on your own. Also, be sure to check your library’s science section; there will usually be a few books on highschool/first-year uni-level math/calc/linear algebra there.
So you’re able to solve lots of different problems now. You can come up with solutions to do cool computations and are actually gaining some competence. But now, you’re stuck on doing some other task which is a little more abstract. Maybe you’re trying to write an actual user-interface for a program, instead of your black/white terminal. Or perhaps you’re trying to make one program interact with another. This is where libraries and APIs come handy.
Q: I’m trying to make some web requests and do stuff with the internet. How?
A: Have a look at networking. You’ll learn about packets, protocols, routing and more. Once you understand it theoretically, you can start working with it with some tutorials. Search for a library that does something like sending a web request for you, and learn how you can get the data. Then apply your algorithm knowledge above to make your program do something with the data.
Q: How can I make cool interfaces for my C/C++ programs?
Q: I’m trying to do X! How?
A: You already see the pattern here. Google for a framework that does it. Maybe search StackOverflow for solutions on how people have done it. Eventually, you’ll come across something and you’ll be able to take it and use it for your projects.
Eventually, you’ll have a nice toolbox that you can use to get most tasks done. Take it another step further, though. Have a look at the code for those libraries and frameworks, and understand how they work. It might be daunting, especially with something as big as Qt or something that’s closed source, or uses some other low-level commands. You might need to really use all of your brainpower just to understand what’s going on, especially when they use other low-level libraries like the WinAPI/Linux API to draw things on the screen. It’s tough, but understanding will make you much better since you’ll understand why things break and how you can stop them from breaking.
Once you understand the functions, try to rewrite them yourself. It’ll be basic and it’s unlikely you’ll ever actually use your own code for other projects here, but again, your understanding will deepen and you’ll get even better as a programmer.
As mentioned in the intro, this is by no means a complete guide or list of things to do to make you an amazing programmer. There are way too many fields in programming and development to write a be-all/end-all guide, but this should be enough of a launchpad for you to bounce off of and finally make use of your time, switch around your mindset, and gain enough competence programming to actually come up with some great programs. Have a look at GitHub and other open-source projects in your spare time, and understand how they work.