A collection of the various resources I've used to become a software engineer
In an effort to make the tech industry more accessible, I have created this document to help anyone who wants to become a software developer see the materials I have used in my journey to break in and grow within the tech industry.
The following resources listed in this document are the courses, articles, videos, tools, and games that helped me build a major part of my foundation as a programmer.
This will likely be an ever growing document, as being a software developer means constantly growing and learning more.
Sections:
The resources listed in this section were courses or materials that helped me build a major part of my foundation as a programmer.
One thing of note is that there's a lot of overlap in the CS topics these resources all cover which is intentional. A lot of these topics are difficult to grasp initially, and I found while learning them, that I was able to gain a much stronger understanding of each topic if I learned about it from multiple sources.
This is a really great resource for anyone just starting out and was integral to my success as a newbie. The lessons here are very simple and cater to learners of all ages, not assuming any kind of background in programming. The instructor, Pamela, is really great at breaking down pretty complex concepts in such a way that theyre incredibly easy to understand. The only issue I had with these tutorials was the Object-Oriented Programming section in the introduction to JavaScript, I found it a bit difficult to understand at the time.
My resource rating: 4.5/5
CS50 was a really helpful resource when I was beginning to learn about concepts like algorithms and data structures, as well as the importance of memory management (even in scripting languages like JavaScript). It also covers the basics of things like hexadecimals in color coding, very basic encryption, and problem solving programming techniques. The big issue I have with this course is that it gets really really hard really quickly for a course that is marketed towards total beginners. At times I found the instructors to move too fast during the homework tutorials, and I found that reaching out to the Facebook and Reddit groups often left me more confused than I was before.
My course recommendations:
CS50's rule that you shouldnt look at anyone elses solutions while trying to solve the homework problems isn't really indicative of how the software development field works. If you are not taking this course for credit or to get the certificate, I would recommend timeboxing how long you'll work on a homework problem (e.g. 15 minutes) before you search for other people's solutions on Google. DON'T copy and paste their solutions, that won't help you learn at all. Try to reason you way through their solution, be sure that their solution makes sense to you, and then try to find an alternative solution to the problem using what you have learned from theirs. Bonus points if you can come up with a solution that is more efficient.
While the class lectures and shorts are great, youll likely have to look at outside resources like the BaseCS series to reinforce what youre learning about CS fundamentals from this class. If you're new to programming, I would highly recommend taking Khan Academy's computer programming course first.
Take many many breaks while working through this course. Most people do not finish CS50 quickly, and it's okay to work through it over weeks and months.
The BaseCS podcast is similar to the main podcast, however each episode is shorter and the entire focus is on the foundations of computer science taught by Vaidehi Joshi. The BaseCS podcast is incredibly helpful for learning the kind of computer science fundamentals that I personally struggled to understand elsewhere.
And finally, theres the community, its most active on twitter, but theres also a facebook group which I have found to be incredibly useful and encouraging as a beginner.
I cannot recommend this channel enough. The Net Ninja is a a YouTube channel that covers a variety of topics throughout the web stack including frameworks like React and Vue. This channel really helped me cement my knowledge of Node.js and Graphql and also helped me through my coding bootcamp when I was learning MongoDB, Python, and Django.
Links:
My resource rating: 5/5
I also found this to be a really good choice for helping me to nail down object-oriented programming, as well as for learning Node.js, jQuery, and how AJAX and JSON both work. My main problem with this resource was that I felt that the cost of $25 a month for just a basic membership seems quite expensive especially when compared to many of the Udemy courses that are out there.
Another really great YouTube channel, he mainly focuses on JavaScript but he has videos that cover a few other things like Test Driven Development, Haskell, and his opinions on various technologies as a veteran in the field. I personally learned a lot from his series of videos on JavaScript Functional Programming, Advanced Object-Oriented Programming, and ES6 features. He can get a little too abstract for newbies (which he acknowledges as most of his videos are meant to be for intermediate to advanced programmers), but if you already have a good grounding in programming, especially in JavaScript, his channel is really useful.
Link: https://www.youtube.com/channel/UCO1cgjhGzsSYb1rsB4bFe4Q/playlists
My resource rating: 4/5
A really good resource for tutorials on JavaScript. Most of his videos have a focus on programming as it applies to art work using the P5.js library, however his Working with Data", TwitterBot, and "ES6" playlists are the courses I believe have the most value. The biggest problem for me is that Daniel has a certain awkwardness on camera and he makes a lot of uncomfortable, self-deprecating jokes that can be distracting during the videos.
My resource rating: 4/5
The resources in this category were courses, videos, and articles that I found to be very helpful while learning to program, however, in many cases they were not necessarily integral to my foundations as a software engineer.
These two channels really helped me break down some of the harder parts of programming as beginner in C and I would highly recommend watching their videos while working through doing CS50:
Links:
Pretty good resource for learning the basics of the Java programming language. At times it be a bit slow if you have any prior experience writing programs in Java, but it does a really good job of covering the fundamentals and is great for learning object oriented programming.
A very in depth book on how Javascript works at its lowest level. I would not recommend this course for beginners, however I believe it's a great read to tackle once you have become somewhat advanced at programming in JavaScript.
Essentially the Yahoo Answers of programming but people actually use it. Generally speaking, if you have a question about something related to programming, someone has asked it and had it answered here. The biggest drawback is that it can be a bit beginner unfriendly as the stackoverflow community can be quiet toxic at times.
A very in-depth tutorial series that teaches you how to begin developing Graphql for client to server applications. While the tutorials here are bit heavier on the theory-side of GraphQL, I find that they pair nicely with the Net Ninja's course on Graphql which is heavier on the application side of the technology.
If you elect to make software development more than just a hobby, there are tons of companies looking for people with your skillset. In fact, according to the 2016 Department of Labor statistics, over the next 10 years there will be far more positions in software development than there are people to fill them, which means working in this field will likely lead to above average salaries.
Fizzbuzz is a notorious problem asked in many programming interviews. For most programmers it would appear quite easy to solve, however, there is one small gotcha that often slips up even the most veteran developers. It is also hailed as one of the most common technical interview questions. -https://www.youtube.com/watch?v=Pt8gGCc2Gsk
A small game that helps you practice your SQL skills by solving a murder based on evidence in a police database. You'll need a basic understanding of SQL in order to be able to play, but it's great for reinforcing your skills.
A tool for converting binary numbers into decimal formats (and vice-versa). Not something I need to do on the day to day, but it is useful when you are first learning how binary works.
A useful web page for referencing http status codes and their associated meanings.
A great website that tells what front-end technologies are available on both desktop and mobile web browsers. This is extremely useful if you are working on web app that must support wide a range of users including those using legacy browsers.
Every day, new advancements in the tech industry change the world we live in and alter the fundamental ways we go about life. Unfortunately, sometimes these changes do not affect us all evenly, and can sometimes further marginalize certain groups. As such, social justice and ethical practices are incredibly important in this industry. Below are resources I have used to learn about social issues in tech and some of the organizations that have been created to solve them.
An organization based in Oakland, California that works to help East Bay residents from underrepresented backgrounds gain access to the tech industry.
A podcast by Saron Yitbarek (founder of CodeNewbie) that discusses the history of computing starting from the origins of the operating system and command line. Super interesting to listen to if you interestde in learning about the hisotirical context that created many of core technologies used in software development today.
A game developer with very interesting videos about the ridiculous amount of work and talent that goes into developing modern video games.
The creator of the BaseCS series and advocate for accessibility in Computer Science. Also very active in the social justice space with an intersectional approach to equity in the tech industry.
Founder of CodeNewbie and a great resource in learning about tech
Prominent voice in the tech industry having led teams at Google, Slack, and Microsoft. Strong advocate for Diversity and Inclusion in the tech industry.
Former manager of the React.js team at Facebook and well known voice in the tech industry.
Influential member of the React.js team at Facebook.
Prominent engineer in the tech indsutry, on the core contributors team of the Vue.js framework.
Founder of PoC in tech and cofounder of the tech-ish podcast.
Well-known engineer manager at Github.
Creator of Ruby on Rails and co-founder at Basecamp.
Well known software engineer at Slack.