Resources


A currated list of resources to cater to all skill levels. Whether you're in Computer Science, Math, Stats or any other major, we got something for everyone! Below we have a list of our resources, suggested resources and a FAQ for projects. Items marked with a Star (*) are especially recommended.

Past Seminars

Algorithm Division


Beginner Guides

Advanced Guides

Online Communities

Recommended Readings

CS Resources

Interview Prep

Jobs and Internships

Programming Tools

Free Stuff for Students!

General FAQ

More coming soon!

You can start by looking reading the guides under Beginner Guides. This section will show you the fundamentals of programming (You dont need to read it all to program), an introduction to web programming, keeping tracked copies of your files and how to host your website for free as a student. Using Google to find solutions or get a better understanding of a concept will help you greatly. Once you understand the fundamentals, it'll be easier to hop to other topics in the list! It is ok not to remember every aspect of a language but if you want to get better, practice makes perfect! Also, if you're a non cs major and want to dive into more advanced computer science, check out this guide:
  • Guide to become a Software Engineer / Computer Science Study Guide.
  • You can start by learning HTML and CSS from a tutorial site called W3Schools or from our past web developement seminar which you can find with the past seminars button up top. HTML and CSS will allow you to build a webpage. One you get a good understanding of both languages. You can explore CSS frameworks such as Bootstrap, Foundation and MaterializeCSS to easily make responsive webpages (Webpages that automatically scale to the device a user is making). Not only that, you can use JavaScript or JQuery to make some amazing features on your website.

    To put your site on the web, check out this guide Hosting a website for free or request a webspace from UofT. Brackets is a great text editor for building personal websites since it auto generates your code to a webpage in real time!

    "An integrated development environment (IDE) is a software application that provides comprehensive facilities to computer programmers for software development. An IDE normally consists of a source code editor, build automation tools, and a debugger. Most modern IDEs have intelligent code completion." (Wikipedia) These applications are usually built for a specific language or task and great for beginners to use since you can edit, debug and run your code in the same place. However, if you're more experienced, it's best to use IDE's only for situations where you need it or specific tasks that need to be done. Examples include: IntelliJ/Android Studio for Java or Android, XCode for iOS development. Text Editors such as VSCode or Sublime give you the flexibility to download the packages and the tools you need for any language. These text editors usually have an integrated terminal you can use to run your programs.

    Project FAQ

    More coming soon!

    The problem always comes first. It is important to think of an idea you like and are willing to commit to because you will be more motivated towards completing it the way you intended it to be. Next, you will have to decide the tool you will use inorder to solve that problem. Should it be a website, web app, mobile application or desktop application? Choose the best one you believe is suited for this problem and go with it. If your application has a frontend, we recommend you design it beforehand to have an easier implmentation in the future. You can use a program such as Adobe XD to design your UI/UX.
    Popular Platforms (Developer - Language)
    Traditional
    • Android (Google - XML + Java/Kotlin)
    • iOS (Apple - C#/Swift)
    Cross Platform (Both Android/iOS)

    Before you begin your project, consider the following:
    • Do I need to interact with hardware?
    • Do I need my app to have consistant native performance on either platform?
    • Do I need my app to have a small file size?
    • Do I need to build an app fast?
    • Does my app need to run on both platforms?
    • Does my app mostly use web technologies?
    • Am I ok with "fast as native" performance?

    If you answered yes to 1-3, go with Traditional. When developing with native Android and iOS languages, you get much better consistant performance, more tools to work with and more control over how your application works. The problem is there is more work involved in building your application and you have to build a whole new application if you want to have it on both platforms. The differences between Android and iOS are distinct and you can read more about them in the links above. Mostly likely you will be using an IDE: Android Studio or IntelliJ for Android and XCode is a must for iOS

    If you answered yes to 4-7, go with a Cross Platform solution. When developing with a Cross Platform solution, you will build your application faster, have one app that will share code, work both on iOS and Android, and have native-like performance! The problem is that these solutions might run into issues from questions 1-3. However, you can look into these platforms and see if their features are supported for the application you're building. Example: Flutter and React Native allows you to mix with platform code (i.e standard code from Android or iOS) so you can add practically any new feature with a bit of work. These solutions are stable enough to use in production however there are some quirks you might have to look into for your project.
    React Native is great if you already have experience building web applications in React and it's currently the most popular solution. Flutter is great since it is similar with Android or traditional app development. It recently became a new competitor in this space with Flutter 1.0 releasing anot too long ago. Xamarin would be good for you if you have experience with C# or .Net applications. You can use practically any text editor to build you application. Check out this article on how one developer had a 85% reduction in code with a cross platform solution: Why Flutter will change mobile development for the best.

    Note: If you're trying to build an iOS application, you will need a Mac. Exception: React Native with Expo will allow you to run your React app on your Android or iOS without connecting it your computer.
    Popular Choices
    Front-end
    Back-end / Server Language / Environments
    You can also check StackOverFlow's Developer Survey for other popular choices as well.
    Before you begin your project, consider the following:
    • Does my front-end need to be complex?
    • How much data am I storing?
    • What type of server am I running this on?
    • Which server service should I use?
    An Introduction To Web Applications

    Web applications typically have two components: Frontend and Backend. Frontend is usually described as being everything a user can see and the Backend as everything else. When you have a web application with both, it is known as a fullstack application. The frontend interacts with the user while the backend processes or stores that data. You can read more about the differences here: What's the Difference Between the Front-End and Back-End?.
    Also, these web applications are usually deployed to the internet and hosted on a server or an environment such as NGINX but we will get more to that later on.


    Choice of Front-end

    If you just need a simple frontend with buttons or forms then HTML/CSS will be enough for your use. However, if you're making a lot of pages, this can be very tedious. To reduce the workload, you can use a templating engine such as the ones listed above.
    Templating Engines allow you to reuse code, allow you to create templates where you can customize inputs and automatically generate custom webpages. You can read more about them by clicking the links:

  • Pug.JS
  • ejs
  • handlebars

  • JavaScript Frameworks/Libraries are powerful tools that will allow you to take your UI to the next level, save time, reuse code and more! You can read more on when to use them and the differences between them with the following articles:
  • What Is a JavaScript Framework? Here’s Everything You Need to Know
  • JavaScript Frameworks, why and when to use them
  • The deepest reason why modern JavaScript frameworks exist
  • The Best JS Frameworks for Front End (Comparison Article)

  • Also, these popular frameworks/libraries usually have an "awesome" list associated with them containing a load of information.
  • Awesome React
  • Awesome Angular
  • Awesome Vue
  • React is generally more chaotic to learn since there is no right way to use React. Facebook left this library as unopinionated and it's up to the developer (You) to decide it's design. There are thousands of packages and ways you can use React. Everyone has a different style of using it so don't be discouraged. Angular and Vue on the otherhand are opinionated frameworks/libraries since their creators wanted the platforms to be done in a universal fashion. For these technologies, you can read the official guides to lead you in the right direction.


    Choice of Back-end

    As of 2018, some of the backend technologies are comparable in performance. However, there are differences depending on the application you're building. Choose the best one that is best suited for your project, a new platform you would like to learn or the one you feel comfortable with. An example would be using React with Node.js so you would be using the same language for the frontend and backend. Node.js is currently the most popular backend web technology due to it using JavaScript and having a lot of community support for it's packages.
    Node.js has been the king of speed for the last few years but PHP 7 is a new challenger. It's an interesting topic that you can read these articles to learn more:

  • PHP 7 vs. Node.js
  • PHP vs Node.js 2018

  • Choice of Database

    The main thing that determines the database for your application is whether you need a SQL or a NoSQL database. SQL databases are relational where there are recognizable relationships between stored data in a table of information. SQL provides data consistency, allow complex queries and safe structured data.
    NoSQL databases are non-relational where unstructured data is stored in collections. These collections can be key-valued pairs, graphs and much more! NoSQL is easily scalabile for large data sets, and allows flexibility to change your collection structures as you build your application easily without an existing predefined structure.
    Check out the following links for more info on the use cases, the benefits and con's of each type:

  • What is a relational database?
  • Difference between SQL and NoSQL
  • SQL vs NoSQL Database Differences Explained with few Example DB

  • Ok great. How do go about learning these?

    Pick a Back-end / Server Language / Environment technology. For example Node.js with JavaScript, MAMP with PHP and Django with Python. Then pick a database you would like to pair it. Then the frontend depending on your needs.

    For this guide, I will focusing on a learning path for building a fullstack application with Node.js/Express.js, MongoDB and React. Steps 1-3 are backend. Note: You do not need to follow these steps in order but keep in mind these some of these articles / tutorials are teaching good practices and learning from them will lead to you to become a better web developer. Topics such as avoiding Promise Chaining Hell, and omplex queries running forever ... etc can lead serious issues if you're writing production code.
    Extra Material
    If you want to dive into more advanced topics, you can read up on these new technologies.
    Hosting and deploying web applications

    Coming soon...


    Computer Science Enrichment Club


    1265 Military Trail
    Toronto, ON
    M1C 1A4

    © CSEC 2019. All Rights Reserved
    Made with by CSEC-W Team