Become a Developer With These 20+ Resources
Say you’ve finished a course or some book to learn a programming language. What’s next? Are you just going to tick off “learn programming” from your todo list, feel good about yourself, do nothing, forget what you’ve learned after a month, and then complain how you can’t seem to build anything? Or, do you see yourself doing this if you’re planning on changing your career to become a developer?
Fear not! (๑•̀ㅂ•́)و✧
This article will provide you a list of carefully curated resources that will help you continue your coding journey, regardless of what programming language you learned.
Note 1: If you haven’t even started learning a programming language, we built a quiz that will help you determine the best programming language for you. As the article is meant for beginners who’ve just learned the basics of a programming language, you should at least complete a course or book to get the most out of the resources listed here.
Note 2: If you’re aiming to become a front-end web developer, you might not find this list as useful. However, if you plan to transition to a full-stack web developer, you might find the article helpful.
How to Discipline Yourself
Learning to code, especially if you’re teaching yourself, takes a lot of self-discipline. Since the point of the article is not how to discipline yourself, I’m only going to recommend one resource here. However, feel free to refer to this post for more productivity apps that will help you learn how to code.
Anyhow, if you don’t already use a task-setting app, Wunderlist is a free, nice-looking one you can use that I personally like, as it feels good to tick stuff off.
Wunderlist’s simple interface allows you to easily set a repeating task, add notes to the task, and more. The free version allows you to add up to 25 subtasks, which is pretty neat. Naturally you can also organize different lists for different non-programming related purposes and have a list just for programming goals/tasks.
You can install the Wunderlist app on your phone and desktop (Mac/Windows) so it syncs on both sides – this way both your phone and your computer will nag you about it. There’s no app for Linux, but you can still use the list through your browser and have it send you desktop notifications (you need to enable it first by setting a reminding time for a task).
Resources to Practice Coding
Now that you’re armed with a task setting app that you can use as a goal-setter, here are some sites that will help you practice with writing code. You’d likely get stuck eventually, but try to solve problems yourself first, google next, and then if you’re still stuck, reach out to get help from the community.
Perhaps gaming is not your thing – not all people want to learn how to code because they like to game. Also, you’d likely run out of exercises to practice with before they become too hard for beginners. If that’s the case for you, head over to CodeChef and start working up from their beginner practice problems and eventually become experienced enough to solve more difficult challenges.
Most businesses don’t need developers who are algorithm geniuses, but if you’re aiming to get into large tech companies or into startups with products that rely on good performance, then it’s important for you to work on your programming algorithm skills.
Extra: Once you’re experienced enough, you should check out TopCoder to get a taste of what high quality problems are like. Moreover, if you’re passionate about math or you’re interested in honing your algorithmic programming, you should also give the problems on ProjectEuler a try.
Reddit’s /r/dailyprogrammer board is also a nice place to find programming tasks to work on. Currently there are over 200 challenges for each level of difficulty which you can find in their archives, and it’s still updated with new challenges every week.
You Might Also Want to Read: 9 Essential Tips on How to Tackle a Coding Challenge
Programming challenges too boring for you? Check out this list of programming project ideas with over 10k stars on GitHub – there’s bound to be something you’d hopefully be interested in building. You can also check out other people’s solutions if you’re truly stuck.
Once you’ve gone through programming tasks on the list, you can always refer to Rosetta Code’s list of 750+ project tasks for more inspiration, and each task has a solution in a variety of different programming languages.
Resources to Improve your CS Fundamentals
One thing self-taught programmers often lack is a proper understanding of fundamental computer science, such as how algorithms or data structures work, or why a solution is better/more efficient. In a nutshell, as taken from this Quora answer, “Algorithms are like verbs and data structures are like nouns.”
Admittedly, while deep knowledge about algorithms and data structures won’t do a thing to help you build an actual software from scratch, and also has little to do with improving the quality of your codebase, it will likely make a difference on the scalability and performance of a software. In other words, using the right data structure and algorithm will impact user experience or maybe save money on the resources needed to host an app, especially if it’s going to scale. Many whiteboard interviews still seem to focus on asking questions on algorithms and data structures, and while almost everyone seems to dislike whiteboard interviews, it doesn’t hurt to wrap your head around the concepts.
All good programmers are likely to shake their head at the code they’ve written a year ago (since this means they’ve improved), so there’s no need to feel pressure about your algorithmic abilities because you’re not going to be awesome within a month.
Nonetheless, while you’re working through programming challenges, you might want to also make use of these sites to help you have a better idea of why you should use a certain solution over another one.
If you’re keen on learning algorithms and you’ve googled about how to improve your knowledge about computer algorithms, you’d likely see people recommending the book Introduction to Algorithms by Cormen, which is the #1 best-seller on Amazon for programming algorithms. While you aren’t supposed to memorize the algorithms mentioned in the book, you’ll know about the existence of those algorithms, which will be very useful for you in the long-run.
Problem is, that book is not beginner-friendly at all, especially if math isn’t your forte. Thankfully, there’s this very nice, free, and beginner-friendly course on Khan Academy that will introduce you to algorithms. And it’s designed with the help of Cormen, the author of that Intro to Algorithms book. Eventually you might want to read the book, and you’d probably want to get a mentor to help you work through the problems on ProjectEuler if you find the questions too challenging.
If you have no idea what data structures are, this is a cute little read that will help you understand the basics. The author also explains algorithm complexity and basic recursions if you also don’t understand how those work. The posts are pretty easy to read through and won’t take much time.
For a better understanding of how algorithms work, it’s easier to see the process in action. This neat, interactive site is pleasant to look at and quite easy to play around with. You can generate random data structures, and then see how algorithms handle the data.
If you’re interested in seeing the visualization of more data structures and algorithms, this list might contain a few more.
If you don’t know what software design patterns are, you should take the time to read up about them at Wikipedia. And… that’s pretty much all you need to do at the moment. Know they exist, but don’t obsess over which design pattern you should use, since design patterns are mainly for communication purposes. If you care too much about what design pattern you should use, you might just end up over-engineering things. Nonetheless, this book about game programming design patterns may be helpful for aspiring game developers, and the online version is free.
You don’t have to be a networking engineer, but you might want to have a basic idea of how networking works, since it will help you in the long-run. This awesome Youtube playlist by Eli the Computer Guy has helped over a million people wrap their heads around how computer networking works. It’s not specifically aimed at programmers, but if you don’t even know what networking is, you will likely find Eli’s videos quite beginner-friendly. Each video lasts roughly half an hour to up to an hour, so you probably want to just invest in one video per day or so to slowly work your way through absorbing the information. Eli’s a rather interesting guy, so he should be able to keep your attention for that amount of time.
This list of core computer science concepts is easy to understand and a good place to start out with, so it’s no surprise it’s one of the all-time top posts at Reddit’s /r/learnprogramming board. The list is only a quick run-through of terms and it’s probably a lot to digest for a deeper understanding, so feel free to slowly read through the linked Wikipedia pages.
The resources I’ve listed above are still pretty much for beginners to wrap their heads around CS concepts. If you want to delve deeper into computer science and software engineering, the MIT OpenCourseware site is a good resource to take your computer science fundamentals to the next level. You can read the lecture notes, download the class material, and do the same homework and exams previous MIT classes have done. However, you need to buy/rent the suggested reading materials yourself, and be very self-driven. As the subjects become more advanced, you’d likely get frustrated, but perseverance will pay off.
Perhaps you should start out solidifying your fundamentals with Structure and Interpretation of Computer Programs, which is a required course for all MIT students in the computer science department. Most courses are somewhat language-specific, however, so it’s best if you know Python to do the homework/exams for the Introduction to Algorithms course, or Java for their Elements of Software Construction course and other software engineering-related courses.
…Maybe MIT’s OpenCourseware is too challenging and you’re falling asleep just trying to read some textbook. Those students attended lectures, and you haven’t, so don’t feel bad.
Another way to gain a deeper understanding of computer science is to complete the learning path at OpenCourseware, which includes courses that will help you brush up your math / logical skills. The curriculum links to great, free MOOCs from the best universities in the world.
Ideally you should invest at least 1~2 hours every day to complete the learning path, but the result will be well-worth the effort.
Resources to Help You Build Apps
What if your biggest motivation to learn computer programming is to actually build things, and you don’t want to be working on difficult coding problems every day?
Even if you’re not motivated by building things, you should still work on your own projects to learn how to actually build products, because CS fundamentals will only help you understand how to programmatically solve problems, but won’t help you understand how to build an app that will actually solve real-world problems. The only way to learn how to do that is to build an app.
I’ve written an article about how to build your own app from scratch before, but here are some tools you can use to ease your planning stages (though, your number one resource should be Google 😉 ).
You might be thinking… didn’t I already recommend a todo app at the very beginning? Well, for me, this one may work better as a todo list for an app and is easier to use in the planning stages, as you can easily see the whole picture. You can mark list items off as completed or be an advanced user with hashtags and whatnots, but since you can’t really set any time limit for building features (especially if you’re a beginner), you don’t really need any reminders for this. Or, you can just use your existing productivity app, whether it’s Evernote or something else.
Your app logic will need some designing, and to have a clearer idea of how things work, you should chart it out – whether it’s a flowchart, and ER diagram, or some UML diagram. Use a diagramming tool to make this process easier, especially if chickens can scratch something more legible than your handwriting. Draw.io is a free online tool for creating charts, but if you don’t like using your browser, try Dia. It’s not the best-looking in terms of UI design, but it’s powerful and works well for Windows, Linux, and Mac OS.
When building an app, you’ll likely need to implement some feature built by other developers to make your life easier (it’s impractical to build Google Maps by yourself, for example), or maybe you want to pull information from some service like Twitter. Your program interacts with those services through their library APIs, and this massive directory contains over 14,000 APIs you can search from, which is pretty useful if you’re researching for solutions or if you’re looking for APIs to study. However if you already know what you want to use, googling is faster.
If you don’t know how to use APIs, Codecademy has some API tracks that will help you get started on how to use APIs.
Most apps need a database to store information. It’s highly recommended to use a relational database management system (RDBMS) to store information, in which you’d use a Structured Query Language (SQL) to manage and query data. Assuming you already learned SQL, this free database modeling tool will help you plan out and design an app’s database. You can also refer to this site to see how professionals have modeled their data, and there’s a wealth of examples to study from.
You Might Also Want to Read: 7 Steps to Debug Efficiently and Effectively
Learning how to read code from open source projects on GitHub is an essential step in your path to become a developer. This site is pretty much your ultimate stop for language or framework documentation – it’s searchable and really fast. Just enable or disable the stacks you need to look up, and you can easily find the documentation for whatever you’re trying to use. This site is especially helpful if you’re trying to read the source code and you don’t understand what it’s doing, or why it’s using something over another.
If you’re aiming to be a backend developer for a web app or some cloud service, you’ll need to build APIs to facilitate communication between the server and client (browser). This tutorial will get you started on how to build an API that is in accordance to industry best practices.
Tooting our horns here, but Codementor is a place where you can get programming help. With over 4000+ expert developers skilled in different technologies on our platform, you can generally get personalized, on-demand 1-on-1 mentorship. Whether you need code review, are having trouble understanding some concept, got stuck on a programming challenge/exercise, or can’t get your code to work and don’t understand why, this is the probably one of the most beginner-friendly places to get help. If you want become a better developer and build your confidence, Codementor will help you with that as well.
Granted, Codementor is not a free service. Mentors set their own rates and usually charge by the timer, which may be expensive, but some mentors are willing to give students a discount. You can also find a long-term mentor via our platform to tutor you regularly.
If you’re a student with no income and your parents can’t sponsor you, consider getting help via iRC channels, going to local meetups, or googling/reading answers on StackOverflow.
If you don’t understand how to use git, a version control system, you should. Git allows you to collaborate on team projects and will also save your life if you messed things up. Frankly, there’s little reason for you to not use git for your projects. Playing the git game is fun way to learn and understand how to use git commands. If you don’t know how to use basic git commands yet, this article will help you understand how to use git and GitHub.
Becoming a professional developer is not an easy task, and as you can see from the resources, there is a LOT to learn. Having solid foundations is just the beginning – the learning process will never stop because you will constantly have to keep up with new technologies and solve new market/business problems.
If you find yourself questioning whether this is the right path for you, the best indicator is whether or not you are interested in learning about new knowledge, enjoy the epiphany you get when you finally understand how things work, and if you love the sense of accomplishment from solving a problem. If you don’t feel any happiness at all from programming, do yourself a favor and seek another path. If you’re not happy only because you’re struggling, don’t give up just yet.
Many companies or jobs don’t need developers who are algorithmic geniuses, so if you feel frustrated in that area, let experience mold your skills and don’t rush it.
As long as you’re improving and as long as you want to improve, you should give yourself time and get better at things that you are good at. No developer is the same, and everyone has their own strengths and weaknesses – you might find some things easy while others find them difficult, and vice versa. Development teams are often comprised of programmers who can complement each other, so don’t be discouraged just because you are struggling with one thing.
If you feel like you aren’t improving or if you want to improve but don’t know how and you are able to spend some money, feel free to get a Codementor to guide you through your coding journey.