List of resources to get started with software development.
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.
- 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.
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 (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.
- Eloquent JavaScript It provides an in depth explanation of all the core JS concepts finally ending with an introduction to Node.
- JavaScripting, a great source of JavaScript libraries and frameworks.
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 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 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
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.
- 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".
- 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.
- Django Packages contains different django packages for almost all different categories. You can compare different packages in same category and choose your favorite one.
The Django Test Framework @anant-joshi's guide to the Django Test Framework
Django REST framework is a powerful and flexible toolkit for building Web APIs.
- 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.
- 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.
AngularJS (also written as Angular.js) is a JavaScript-based open-source front-end web application framework mainly maintained by Google and by a community of individuals and corporations to address many of the challenges encountered in developing single-page applications.
- AngularJS Google’s official website for AngularJS is a good place to kickstart your journey towards learning AngularJS. The site has useful text-based learning material supported by videos as well as other literature on the topic.
- TutorialsPoint offers a text-based course explaining the basic programming concepts and components of AngularJS. You can easily learn to develop AngularJS web applications with this course.
- AirPair Todd Motto’s highly insightful tutorial on AngularJS is definitely worth checking out. This text-based tutorial imparts AngularJS framework knowledge covering topics, such as dynamic routing, form validation, server communication, templating and more.
- VideoTutorial AngularJS Fundamentals in 60 Minutes. Also Egghead is a good video tutorial link.
Projects It has a list of open source projects and examples using AngularJS.
Angular is a TypeScript-based open-source front-end web application framework led by the Angular Team at Google and by a community of individuals and corporations. Angular is a complete rewrite from the same team that built AngularJS.
- Angular 4 Angular provides built-in features for animation, http service, and materials which in turn has features such as auto-complete, navigation, toolbar, menus, etc.
- Staff Appreciation Dashboard The Tour of Heroes tutorial covers the fundamentals of Angular.In this tutorial you will build an app that helps a staffing agency manage its stable of heroes.
- Step by Step TutorialLearning Angular 4 step by step
- Learn Angular 4 from ScratchAngular 4 is here and it's time to learn one of the most popular and powerful javascript frameworks. Join me in this free Angular 4 course and follow along by watching videos or reading written tutorials.
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 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.
- 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.
- 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.
- Nodeschool.io has the best in-depth interactive tutorials.
- TutorialsPoint is always good for beginners.
- MDN's ExpressJS Guide is a more advance guide.
- Microsoft's NodeJS Course covers Express and Mongoose (for Mongo).
- NetNinja's playlist covers everything.
Android development uses the Android SDK with Java or Kotlin as the language for native android development. This section also includes links for React Native.
- Udacity: Developing Android Apps
- Google Codelabs: Android tutorials
- Udacity: Kotlin for Android Developers
- Stanford: Android App Development. A little older guide.
- Google Developers Training : Android Development List of courses of beginners, intermediate and advanced level by Google
- Free Android Development Courses List of free courses provided by Udemy.
- 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.
- FireBase Android
- 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
- Jetpack Navigation Use Jetpack navigation to create Single Activity Apps, and navigate easily using fragments along with data passing capabilities. It is much easier to use fragments with this, prefer using this if you don't want the trouble of handling navigation stacks
- RecyclerView: Everybody go through this, no matter what part of the Android stack you focus on
- Retrofit ,Volley (Networking)
- Glide,picasso (images)
- GSON (JSON to POJO and vice versa)
- leakcanary (memory leaks)
- Room Persistence Library (abstraction layer over SQLite)
- Data Binding (Binding views without expensive findViewById() calls)
- A big list here
React Native is a Native JS library to create Mobile Apps(Android, IOS & TV) and quite easier to implement as compared to AndroidStudio(Java).
- Doumentation: https://facebook.github.io/react-native/docs/getting-started --prefer following "Build use Native Code".
- A course by CS50, teaches right from basics of JS & React: https://cs50.github.io/mobile/lectures / https://www.youtube.com/playlist?list=PLhQjrBD2T382gdfveyad09Ierl_3Jh_wR
- React Navigation is a realy usefull(and must use) library for all types of navigations in Mobile Apps: https://reactnavigation.org/docs/en/getting-started.html
- You can also subscribe to this thread on reddit, it is useful sometimes: https://www.reddit.com/r/reactnative
- Get other cool libraries from: https://www.npmjs.com
Suggestions: Use Live Reload & Debug JS Remotely, make sure you make yourself comfirtable with JS syntax, preferably-remove all logs before build, do not touch native scripts without understanding(may cause frustrating build errors).
Flutter is an open source framework by Google for building beautiful, natively compiled, multi-platform applications from a single codebase.
- Installation
- Dart
- Flutter Basics
- https://www.youtube.com/playlist?list=PL4cUxeGkcC9jLYyp2Aoh6hcWuxFDX6PBJ
- https://www.youtube.com/watch?v=jhak1BCbK2k
- https://www.youtube.com/watch?v=1gDhl4leEzA
- Blogs and Documentation
- https://docs.flutter.dev/
- https://www.freecodecamp.org/news/an-introduction-to-flutter-the-basics-9fe541fd39e2/
- Get other cool libraries from: https://pub.dev/
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
- 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.
- 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.
- A git workflow for small teams
- Oliver Steele's Blog Post on commit policies
- A successful git branching model
- Git Best Practises
- 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.
- A curated list of all public APIs While this may look like a lot, go through the list to see which suits your application.
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 (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.
- 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.
- 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
Machine learning is an application of artificial intelligence (AI) that provides systems the ability to automatically learn and improve from experience without being explicitly programmed. Machine learning focuses on the development of computer programs that can access data and use it learn for themselves. In the past decade, machine learning has given us self-driving cars, practical speech recognition, effective web search, and a vastly improved understanding of the human genome.
Machine Learning today is one of the most sought-after skills in the market. A lot of Software Engineers are picking up ML, simply because it is a highly paid skill. So, how do you go about Machine Learning?
• First things first - the prerequisites:
o Basic calculus. In Machine Learning, you’d be working on a lot of optimizations that require knowledge of Calculus. It would be highly recommended that you are aware of functions, limits, differentiation, maxima, minima, etc.
o Linear Algebra. When you talk about ML, you will be dealing with matrices and vectors every day. So, knowledge of Linear Algebra is a must. However, you’d also be required to know about other important topics like Eigenvalues and Eigenvectors.
o Probability. Most ML algorithms try to “model” the underlying phenomena that generated the observed data. All of this modelling is probabilistic. It is therefore highly recommended that you are comfortable with the theory of Probability.
• Getting into actual ML:
-
Machine Learning by Andrew Ng. on Coursera. It is the best course there is, on this topic, and takes you slowly and efficiently through all the different algorithms like, Regression, Classification, to name a few. Once you finish this about 8-week long course, you should be ready to start taking up small ML projects of your own for practice. The Octave/MATLAB assignments are pretty outdated, though. Python based projects on ML are recommended.
-
Machine Learning Crash Course as provided by Google, is also a good way to step into the world of ML. However, it is, as its name suggests, a crash course, and would not go as into depth as the Coursera one does. So, if you’re in a hurry, try this one out, and you’ll be done in almost a week or two!
-
The Complete Machine Learning Course with Python by Udemy with help you build a Portfolio of 12 Machine Learning Projects with Python, SVM, Regression, Unsupervised Machine Learning & More! It's costlier than most courses though, but given the wide variety of teaching styles, including project-based ones, and versatility with Python, Matplotlib, Scikit-learn, et cetera, it's safe to say it is well worth it! There are occasional discounts though, so make heavy use of them.
- Machine Learning with Python Tutorial series on pythonprogramming.net is an in-depth and practical machine learning hands-on course. It aims to give you a wholistic understanding of machine learning, covering theory, application, and inner workings of supervised, unsupervised, and deep learning algorithms. It covers linear regression, K Nearest Neighbors, Support Vector Machines (SVM), flat clustering, hierarchical clustering, and neural networks, using Matplotlib, Scikit-learn, et cetera. What's more, it's free!
For those of you, who prefer to learn & understand through a good, thorough read:
-
Pattern Recognition and Machine Learning or PRML by Ian Bishop is hands down the best ML book in existence! The book is thorough on whatever concepts needed, be it purely mathematical or programming. The book is supported by a great deal of additional material, including lecture slides as well as the complete set of figures used in the book, and you are encouraged to visit the book web site for the latest information. There are some complementary volumes to this, which implement ML through MATLAB.
-
Machine Learning by Tom Mitchell, as published by McGrawHill, is another introductory text on primary approaches to machine learning and the study of computer algorithms that improve automatically through experience. It introduces all basics concepts from statistics, artificial intelligence, information theory, and other disciplines as the need arises, with balanced coverage of theory and practice, and presents major algorithms with illustrations of their use, which aids quick learning. This book also provides chapterwise exercises. Online data sets and implementations of several algorithms are also available.
-
An Introduction to Statistical Learning with applications in R by Gareth James, Daniela Witten, Trevor Hastie & Robert Tibshirani. The Python implementations of the same can be found here. This is a great book to begin with, as the authors give precise, practical explanations of what methods are available, and when to use them, including explicit R code. Anyone who wants to intelligently analyze complex data should own this book. As a textbook for an introduction to data science through machine learning, there is much to like about ISLR. It’s thorough, lively, written at level appropriate for undergraduates and usable by nonexperts. It’s chock full of interesting examples of how modern predictive machine learning algorithms work (and don’t work) in a variety of settings.
-
Bayesian Reasoning and Machine Learning by David Barber. Speaking of Bayesian statistics, this one is a classic. This takes a Bayesian statistics approach to machine learning. A book worth checking out for anyone getting into the machine learning field.
-
Understanding Machine Learning by Shai Shalev-Shwartz and Shai Ben-David. This book gives a structured introduction to machine learning. It looks at the fundamental theories of machine learning and the mathematical derivations that transform these concepts into practical algorithms. Following that, it covers a list of ML algorithms, including (but not limited to), stochastic gradient descent, neural networks, and structured output learning.
Note: Please do take up ML projects. The best way to learn Machine Learning is to actually apply it to real datasets and solve real problems. Machine Learning is as much of an art as it is a science. You will learn it from experience. Your focus should be on attempting multiple ML projects so as to gain experience and build a strong profile.
Topics to come: Deep Learning, Computer Vision, Cybersecurity and maybe HCI