I spend quite a bit of time talking and exchanging e-mails with new or prospective developers and Computer Science students. One of the most common things that I get asked in these conversations is about resources, supplementary materials (for those occasional not-so-great professors), and any tips that might not be taught in the classroom.
So I thought I would spend a post detailing a few resources that I had recommended recently.
Online Learning Materials
There are tons of websites that can help you learn how to code, build applications, or learn a new language. I'll spend this section detailing a few of my choices and recommendations.
Pluralsight – This is far and away the best resource that you can get as a software developer. It provides video-based learning of the highest quality and covers just about every topic under the technological sun. While it isn't free, it does offer several types of trials (including a free 90-day one as a member of Microsoft's DreamSpark program).
Code School – Pluralsight's younger brother (who they coincidentally own). Much like its video-based brethren, it has great content, albeit with a limited selection. If you want to know more about building web-based applications or sites though, it's worth checking out.
Microsoft Virtual Academy – Another great site that provides more course-based learning and tutorials (i.e. watch a series of videos, take an assessment to gauge learning, repeat). It mostly focuses on the Microsoft software ecosystem, but it’s very easy to get into and can keep you coming back with a bit of gamification.
A few other notable sites worth checking out are :
- Khan Academy - Massive curriculum for just about anything.
- YouTube - Simply search for your topic of choice.
- uDemy - Another huge online archive of courses on various topics.
Online Curricula and Academia
While there are a bevy of sites out there that will actually teach you to code and build applications, there are quite a bit fewer that will help you learn some of the fundamental principles of Computer Science.
These resources are going to be more aligned with those you might see in a traditional Computer Science curriculum and can serve as supplemental resources if you are already pursuing such a degree.
Google’s Guide to Technical Development – This consists of a list of courses that are offered publicly (online) at various universities. It features a very basic curriculum (i.e. Intro to Computer Science, Fundamentals of Java, Python, etc.) but even watching through some of the videos or reading through some of the slides, might serve as a great supplement to your upcoming coursework. Or simply follow it to become a self-taught developer.
MIT OpenCourseWare – MIT offers a wide variety of complete courses that you can watch and participate in online (often complete will syllabi, exams, a schedule, etc.) in your own free time. For example, you can find a huge collection of lectures in both audio and video formats for Electrical Engineering and Computer Science, which again might help to reinforce or supplement some of your existing coursework (or if you just want to actually learn some of these things from extraordinarily talented professors).
edX – Yet another self-paced learning site that has courses on just about everything, including Computer Science.
Google Interview University – A compilation of resources and “things to know” if you wanted to work at a top-tier tech company like Google. It may be a bit advanced for someone just getting into the field, but it's still is a valuable collection of materials.
Since this is more geared towards those that are just entering the field, I'll stray away from some of the canonical software development books and focus on a few that I've found to be accessible and useful both in and out of an academic setting :
- Code: The Hidden Language of Computer Hardware and Software
- The Pragmatic Programmer
- Soft Skills: The Software Developer’s Life Manual
- The Algorithm Design Manual
- The Design of Everyday Things
- Code Complete
Other books like The Mythical Man Month, Programming Pearls, Clean Code, are solid choices as well. But basically any search engine query for "best software development books" should give you an idea of some of the most highly recommended options.
While acing your tests and getting your development chops up are great, they alone won't guarantee that you'll land that job that you want after graduation (should you go the academic route). This is why it's crucial to build your resume and presence as early as you can and know what kind of resources are out there when you do hit the real world.
Create a GitHub Account - GitHub is a popular and free site to host your code and it serves as a great way to act as a portfolio for anyone looking to become a software developer. It’s completely open-source (so anyone can see your code), but it might be a great way to keep track of your school projects and look back on them in the future (or just show off what you’ve done). Once you get your skills up to par, you can even find a project that interests you and become a contributor.
Blogging - If you are into it, having a technical-related blog of challenges that you are facing or ways that you might have solved a problem (or just sharing things like that) can be great on a resume. It's important to note that if you think that you don't have anything valuable to add, that's not true. Often sharing your experiences and how you overcame something, no matter how trivial, can be extremely valuable to another (as experiences and perspectives are nearly always unique).
Stack Overflow – Stack Overflow is the de-facto standard when it comes to question/answer sites online. You can visit the site, create an account and ask a question when you are having trouble. This is another site that can serve as a resume builder, in fact you can use the Careers section of the site to actually have an online resume. (Basically 99% of the Google queries that relate to programming will lead you here).
Consider Joining a Club / Attending a Meet-up - Networking is an incredibly important part of professional life, and meeting others that share your same interests can make the journey that much more enjoyable. Consider checking if your local university has a ACM Chapter or participates in programming competitions, or look into any local software meet-ups to engage with other developers in your area.
Keep Up To Date – Obviously the world of software and computer science changes pretty quickly. A few sites that a great for this are :
Your mileage and preferences may vary, but hopefully at least one of those might be new to you and worth exploring.