Software Development Resources
Resources
List of resources to get started with software development.
Languages
Python
Python is a great object-oriented, interpreted, and interactive programming language. For a beginner diving into the world of programming, Python is arguably the most beginner-friendly and versatile language to start with.
Tutorials
- Official Python Tutorial teaches Python in depth, everything from syntax to the extensive standard library.
- Google’s Python Class is a quick start course intended for people coming from a programming background. If you’re used to verbose languages like Java and C/ C++, this course will give you a taste of Python.
- CodeAcademy is good for introduction to programming.
Web
HTML AND CSS
HTML defines the structure of a web page. It forms the skeleton of the web page. Right from head to toe footer. CSS is used to add styling to the web page.
- FCC HTML5 and CSS
- CodeAcademy HTML
- CodeAcademy CSS
- Udacity Intro Course To HTML and CSS Video Lectures
JavaScript
JavaScript (JS) is the programming language of the web. It allows adding dynamic content to static web pages. Recently, with the advent of Node.JS, it is also being used on the server side.
Books
- Eloquent JavaScript It provides an in depth explanation of all the core JS concepts finally ending with an introduction to Node.
Tutorials
Libraries
- JavaScripting, a great source of JavaScript libraries and frameworks.
Bootstrap
Bootstrap is a free and open-source front-end web framework for designing websites and web applications. It contains HTML- and CSS-based design templates for typography, forms, buttons, navigation and other interface components, as well as optional JavaScript extensions.
- Bootstrap W3school
- Bootstrap tutorial for beginners Video Lectures
- FCC Bootstrap
jQuery
jQuery is a fast, small, and feature-rich JavaScript library. It makes things like HTML document traversal and manipulation, event handling, animation, and Ajax much simpler with an easy-to-use API that works across a multitude of browsers.
- Start with a basic overview into jQuery: W3Schools
- jQuery in Action
- Official Documentation
AJAX
AJAX stands for Ansynchronous JavaScript and XML. It is a set of Web development techniques using many Web technologies on the client side to create asynchronous Web applications. With Ajax, Web applications can send data to and retrieve from a server asynchronously (in the background) without interfering with the display and behavior of the existing page.
- Basic understanding using W3Schools
- NewBoston Tutorials
Designing
Front End Projects
Django
Django is server-side Python framework that allows developers to create web apps with little hassle. It is a high level framework and is hence even suitable for beginners.
Documentation
Books/Videos
- Django book The first 6 chapters are highly recommended and are enough to get you started.
- Tango With Django is another great book to learn from. Slightly more detailed. Recommended chapters include “User Authentication” and “Working with Templates”.
Tutorials
- Django girls build your own blog.
- Django Web Development Sentdex Video Tutorial
- Simple is better than complex contains many intermediate to advanced level tutorials on django and connecting different things with django.
- The New Boston tutorials are good to help you get started with Django and give the basic overview of the framework.
Packages
- Django Packages contains different django packages for almost all different categories. You can compare different packages in same category and choose your favorite one.
Unit Tests
The Django Test Framework
@anant-joshi’s guide to the Django Test Framework
Django REST Framework
Django REST framework is a powerful and flexible toolkit for building Web APIs.
Tutorial
- Detailed tutorial from the website The tutorial will walk you through the building blocks that make up REST framework. It’ll take a little while to get through, but it’ll give you a comprehensive understanding of how everything fits together, and is highly recommended reading.
Video Tutorial Playlist
- DRF video tutorials playlist for a blog from CodingEntrepreneurs
- Django tuts-by Max Goodridge.Can be referred as and when required depending on your needs for the project.
There are a wide range of resources available for learning and using Django REST framework. The Django REST Framework has a comprehensive list available here.
React
React is a JS library to create interactive user interfaces. Complete the following 5 tutorials in order.
Note: The following resources have been copied from the wiki page of CloudCV’s Origami
- Start with a quick overview using the official react docs here.
- Learn some ES6 here.
- Checkout webpack (no need to go hands on for this) on Youtube.
- Complete this excellent free series on React/Redux/ImmutableJS on Youtube.
- Complete this project as you read it.
NodeJS & ExpressJS
NodeJS is a runtime environment for JavaScript based on Chrome’s V8 engine. JavaScript is traditionally a frontend language which was only executed in the web browser. NodeJS allows you to run JavaScript programs without a browser and provides a standard library for building HTTP servers and interface with your local machine/ operating system. Theoretically, it’s JVM for JavaScript. ExpressJS is a NodeJS library which simplifies the creation of complex HTTP servers. Unlike Django, NodeJS/ ExpressJS apps are very lightweight and do not come with features such as authentication or ORM, hence this section is only recommended for people who are familiar with backend development and JavaScript’s asynchronous programming.
Learning NodeJS as an environment
- NodeJS Fundamentals is enough to get you started for ExpressJS.
- TutorialsPoint is good for learning what comes with NodeJS.
- NPM Tutorial. Node Package Manager, NPM, is used for downloading third-party packages for your project. There are a lot of concepts in NPM compared to Python’s PIP, such as local packages and the package.json file. However you’ll only need 3 commands in the beginning.
- nodejs.org documentation is confusing for new comers. However the API reference is good for a cheatsheet.
Documentation
- ExpressJS Documentation can be completed in a day provided you are familiar with JavaScript as a language.
- You will also need MongoDB knowledge in the future, along with Mongoose as an ORM library.
Tutorials
- Nodeschool.io has the best in-depth interactive tutorials.
- TutorialsPoint is always good for beginners.
- MDN’s ExpressJS Guide is a more advance guide.
Courses
- Microsoft’s NodeJS Course covers Express and Mongoose (for Mongo).
Videos
- NetNinja’s playlist covers everything.
Android
Courses
Documentation
- Android Developers Website
You will find pretty much everything that is present in standard Android here - Android Developers Reference
Documentation on all classes is given here - Specific Guides
- Intents
- Activities
Take special note of the activity lifecycle, and the back-stack. The back-stack is a crucial, but oft-neglected part of effective android navigation. - Fragments
Read this once even if you know how to use Fragments. This is the most important concept for a front-end developer - Services
For any service that runs in the background, even when the app is closed - Loaders
For loading data into the UI from any source. Prevents the UI from being unresponsive - ContentProviders
For creating a standardized and effective interface to access your app’s data from within and outside the app. This is very important when doing any kind of local storage - RecyclerView: Everybody go through this, no matter what part of the Android stack you focus on
Git
Every modern development team requires a version control system, and git is probably the best. Linus Torvalds made this, in a mere two weeks to manage the (famously complex) Linux kernel project.
Note: This list has been shamelessly plagiarized sourced from University of Southern California’s page here
Books
- Git Magic is brief and effective. A good read if you are in a hurry.
- Pro Git: A detailed, but thorough book on git. A must read, if you have time.
Tutorials
- Try Git
An absolute beginner’s guide to git. It gives a good start, but covers only the most basic stuff. - Git Immersion
A thorough tutorial on git.
Courses
Workflow and Best Practices
- A git workflow for small teams
- Oliver Steele’s Blog Post on commit policies
- A successful git branching model
- Git Best Practises
CheatSheet
Testing & Optimization
- Unit Testing Guide @anant-joshi’s guide to Unit Tests
- Writing testable code This is a nice guide on writing clean, testable, and maintainable code, as well as writing good tests to go along with it
- Optimization Some basic insights on how to optimize your website here.
Public APIs
- A curated list of all public APIs While this may look like a lot, go through the list to see which suits your application.
Advanced Topics
So, you’ve spent (or as some may call it, wasted) time developing web/android apps but while you like programming, you want to work on something more challenging. If that sounds like you, welcome to our “Advanced Topics” section! It is still a work in progress but we are constantly adding more resources. If you would like to add (or remove) a resource, please feel free to create a PR.
Before we proceed, please keep in mind that these are advanced topics (as the name clearly states) in computer science (coz that’s where all the money is). Trying to jump into these topics without any programming/basic math background may lead to tears and heartbreak. Okay maybe not. But you would have to spend more time than the average user on the topics.
TL;DR: If you want to learn advanced topics, you’ve come to the right place (section). If you don’t have a strong math background, you might have to work harder but it is very doable. Best of luck!
Natural Language Processing
Natural Language Processing (NLP) involves making the computer understand human language (Text and Speech). Most of human knowledge is stored in the form of text (Wikipedia and others). But that text only makes sense to humans. Imagine the possibilities if a computer could know more than one human could in their lifetime. Still not convinced? Think of Alexa, Siri and other assistants. All of these use some form of NLP!
You may choose to either start from the basics of NLP and gradually move to deep learning or you could directly jump to applying deep learning techniques to NLP (if you have a machine learning background) and then once you see how cool NLP is, you could (read should) go back and learn the basics of NLP without all the fancy neural networks.
Courses
- Natural Language Processing by Jason Eisner, Johns Hopkins University. While video lectures aren’t available for the course, you should definitely go solve all the assignments. They are very tough and will strengthen your NLP foundations. You can go through the suggested readings (on the course page) if you need help with homework. (Strongly recommended)
- Natural Language Processing by Dan Jurafsky and Christopher Manning, Stanford University. Both the professors have written two separate text books on NLP. This was a coursera course but it is no longer offered. Sadly, there are no assignments available for the course. You could choose to watch these videos and solve the homework from the first course.
- Deep Learning for NLP by Richard Socher and Christopher Manning, Stanford University. It is a great deep learning course even if you aren’t interested in NLP. The course provides an introduction to deep learning and how to apply it for text data. Make sure you do the course assignments. Also as mentioned earlier, if you decide to start with the course and like NLP, you should most definitely do at least one of course 1 and 2.
Books
- Speech and Language Processing by Dan Jurafsky and James Martin. Great book. Available for free. Doesn’t cover deep learning
Note: Please make sure to implement at least one project once you are fairly comfortable with NLP. You could either use Deep Learning or just stick to the traditional techniques. Or you could do both and compare the two methods :P
Topics to come: Machine Learning, Deep Learning, Computer Vision, Cybersecurity and maybe HCI