Giter Club home page Giter Club logo

learningresources's Introduction

SE-EDU

SE-EDU (se-education.org) is a collection of FOSS resources for Software Engineering (SE) educators and students. The full website is available at https://se-education.org

learningresources's People

Contributors

adoby7 avatar ang-zeyu avatar ayushchatto avatar bqnguyen94 avatar craaaa avatar crphang avatar damithc avatar haozhe321 avatar iskandarzulkarnaien avatar jamessspanggg avatar joanneong avatar junkiattan avatar le0tan avatar li-kai avatar luyangkenneth avatar madanalogy avatar marvinchin avatar nbriannl avatar niqiukun avatar openorclose avatar pyokagan avatar rachx avatar ronaklakhotia avatar tejas2805 avatar tshradheya avatar vivekscl avatar wkurniawan07 avatar xpdavid avatar yamgent avatar zhiyuan-amos avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

learningresources's Issues

Improve Best Practices with git

  • Add more links to relevant articles
  • Add more explanations for complicated/non-beginner friendly concepts or jargon (most likely using tooltips)
  • Add more beginner-friendly tips (e.g. undoing accidental rebase)
  • Add on more information (if any)

Restructure and Add content to XSS

I would like to:

  • Add real life examples into the XSS page, so users can see the potential damage of the vulnerability
  • Add pictures to illustrate examples
  • Improve examples
  • Add tools for testing and prevention against XSS
  • Restructure the content into the recommended structure

Introduction to SQL

Outline:

  • What is SQL
  • Why use SQL
  • An example showing basic commands
  • Getting started
  • Other resources for learning and integrating SQL

Introduction to Linux Shell

  1. What is Shell? (In specific, bash)
  2. shell variables and environment
  3. pipe and data redirection
  4. shell script
  5. to be added....

Fix broken hyperlinks pointing to *.md files

One example of this happening is in this article -> click on Java Concurrency. Seems like the .md links used to work in the past, but are currently broken due to the website being generated by MarkBind.

This is an easy fix - we just need to replace all the broken links with a .html extension.

Add table of contents to all articles and only display them on mobile/print

Progress:

  • Update Contribution Guide to reflect need for content page (PR #181)

  • Programming Languages

    • C++
      • Rvalue References and Move Semantics (PR #144)
    • CSharp
      • Introduction to CSharp (PR #144)
    • Go (PR #144)
    • Haskell (PR #144)
    • Java
      • Java Concurrency (PR #150)
      • Java Streams (PR #150)
      • Java Synchronization (PR #150)
      • Java Reflection (PR #150)
      • JUnit (PR #150)
    • JavaScript
      • Writing Testable JavaScript Code (PR #153)
      • Javascript Promises (PR #153)
      • Javascript Modules (PR #153)
      • Static Typing in JavaScript (PR #153)
    • Kotlin
      • Introduction to Kotlin (PR #153)
      • Null Safety In Kotlin (PR #153)
    • Python (PR #154)
    • Ruby (PR #154)
    • Rust (PR #154)
    • Scala (PR #154)
    • Swift (PR #154)
  • SE Topics

    • Architecture
    • Code Quality
      • Code Quality Metrics (PR #155)
    • Documentation (PR #155)
    • Functional Programming (PR #155)
    • Performance
      • Introduction to Performance Optimization (PR #155)
      • Performance Profiling (PR #155)
      • Web Performance (PR #155)
    • Project Management
      • Agile Development (PR #155)
      • DevOps (PR #155)
    • Revision Control
      • Best Practices with git (PR #155)
    • Scalability (PR #155)
    • Static Analysis
      • Introduction to Static Analysis (PR #176)
      • CheckStyle (PR #176)
      • PMD (PR #176)
      • FindBugs (PR #176)
      • ESLint (PR #176)
    • Testing
      • Integration Testing (PR #176)
      • Writing Testable Code (PR #176)
    • UI/UX
      • Accessibility (PR #176)
      • Design Systems (PR #176)
      • Introduction to UI/UX (PR #176)
      • Refining UX Design Skills (PR #176)
  • App Frameworks

  • Tools Useful for Software Engineers

    • Regular Expressions (#178)
    • Docker (#178)
  • Other Topics

    • Computer Vision (#178)
    • Databases
    • Machine Learning (#178)
    • Multi-Threading
    • Security
      • Cross Site Request Forgery (#180)
      • Cross Site Scripting (#180)
      • Cryptography (#180)
      • HTTPS (#180)
      • Password Storage (#180)
      • SQL Injection (#180)
    • Shell

Chapters Added in 19/20

  • (#168) NumPy (Already added by author. Pending Broken Link Fix: #179)

Initial Discussion (concluded):

11 / 45 topics currently have a table of contents. I personally find that the table of contents adds unnecessary clutter as there is already a navigation sidebar to the right that serves the same purpose.

This is especially prominent on the CUDA page, where the table of contents occupies the whole initial screen:

image

I propose that the 11 topics have their table of contents removed and the contribution guidelines updated to reflect this as well.

This is the CUDA page, with table of contents removed:

image

Much cleaner and less overwhelming in my opinion.

What are your thoughts?

Introduction to Ruby on Rails

  1. What is Ruby on Rails
  2. Why should you use it all
  3. What situations to use it in (and which ones you shouldn't)
  4. Getting started with a simple app.
  5. Further Reading

Fix 'insecure mixed content' error

I am getting complaints from Netlify that the learningresources website is serving insecure mixed content.

Background (insecure mixed content)

HTTP serves content through an un-encrypted channel, which means anyone can intercept the content and modify it without anyone knowing. That is why websites are recommended to activate HTTPS (which our website does), to send them through an encrypted channel.

However, even if the webpage is served in HTTPS, if the webpage embeds other resources using HTTP, then the embedded resources themselves can be compromised, even if the main webpage cannot be tampered with. Hence, this is 'insecure mixed content'.

Problem

Netlify found several images that are served through http rather than https (see the Netlify log for the list of insecure images).

Solution

  1. Force browsers to always access content via the https protocol by using a meta tag. That way, regardless of whatever protocol the page authors specified for their resource's reference uri, it will always be served through https protocol.

    This can be done by putting the following in _markbind/head/head.md:

    <meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">
  2. Some http content just don't have https equivalent, so forcing https will cause them to be broken. So, we either have to (1) save these images onto our repository and serve it ourselves, (2) find alternative subsitutes, or (3) not use them.

    The list of images that needs checking and fixing can be found in the Netlify logs.

    Note: Be sure to put proper attribution if you do (1)!


For more info: https://developers.google.com/web/fundamentals/security/prevent-mixed-content/fixing-mixed-content

Introduction to Spring framework

The Spring Framework is an application framework and inversion of control container for the Java platform. The framework's core features can be used by any Java application, but there are extensions for building web applications on top of the Java EE (Enterprise Edition) platform.

Proposed outline:

  • What is Spring Framework
  • Why learn Spring
  • Core features of Spring framework
  • How to get started with Spring (learning resources)

Password storage

I would like to write a chapter on storing passwords

Textbook outline:

Password storage intro
What's wrong with plaintext?
What is hashing?
Why isn't hashing enough?
Adding salt
The salted hash
If an attacker has gained access to the entire application, what does it matter if my passwords are stored in plaintext or not?
Word of warning
Further reading

Web Accessibility

Outline:

  • What is accessibility
  • Why is accessibility important?
  • How to start improving web accessibility
  • Further reading

Introduction to Dart

  • Why choose Dart?
    • Smooth learning curve:
      • C-style syntax
      • script-flavored syntax sugar
      • but statically typed and support for optional nullity = much less runtime errors
      • OOP approach is so similar to Java that a lot of Java code can be directly migrated to Dart with minor changes
    • Cross-platform: runs on all major platforms
    • Three exection modes to get the best of all worlds
      • for fast development, JIT + Dart VM;
      • for native performance: compilation to platform-specific instructions;
      • for browser support: source-to-source compiler to JavaScript
    • Flutter uses Dart
  • What is Dart?
  • Dart syntax features
    • Functional programming
    • Cascade notation (..)
    • Asynchrony support
    • Java-like OOP, but less verbose
      • getter/setter
      • extension methods
      • generics
  • How to learn Dart?
    • list some resources on Dart
  • What's next?
    • effective Dart
    • use Dart in Flutter

Clean up Java Synchronization chapter

The aforementioned chapter could be better polished by fixing broken links and standardizing the formatting.

Broken Links:

image

and

image

It also appears to be using bold instead of code blocks for code snippets and methods:

image

Introduction to Security Testing

Proposed Category: SE Topics -> Testing

  1. What is Security Testing?
  2. Why Have Security Testing?
  3. How to Get Started With Security Testing?
    Phase 1: Before Development Begins
    Phase 2: During Definition and Design
    Phase 3: During Development
    Phase 4: During Deployment
    Phase 5: Maintenance and Operations
  4. Where to Go From Here?

Primary Reference: OWASP Testing Guide
Secondary References: Guru99.com, SoftwareTestingHelp.com

Introduction to Docker

Outline:

Overview - What is docker?
Why Docker is important to know?
Getting started with docker
Applications of docker
Further techniques/tools that you can use with Docker
Additional Readings

Improve Swift page

Hi, I want to revise and improve the page of Swift to fit the guideline.

  • Add Why should learn swift section
  • Revise existing features to form different Benefits
  • Add Where to go from here section
  • Move some contents from Getting start to Where to go from here, and add learning path in Getting start section.

UI/UX: Design Systems

TOC for the book chapter:

  • What is a Design System?
  • Why should we use a Design System?
  • Why not front-end frameworks or style guides?
  • Benefits of a Design System
  • How to build a Design System
  • Examples of existing Design Systems
  • Ending Notes

Introduction to Dotfiles

Proposed outline:

  • What are dotfiles
  • Examples of dotfiles and their usage
  • Why use dotfiles
  • Management strategies
  • Getting started with Dotfiles

NoSQL ft. mongoDB

Assumptions:

  • Reader has some knowledge of relational databases; Points of comparison will be made.

Aim: Introduce the characteristics of non-relational databases, their benefits, using mongoDB as an example.

What is NoSQL?

Why NoSQL ( vs SQL )

  • 'Agile' / no fixed schema - perfect for changing requirements, real world applications
  • Horizontal scalability
  • Widespread adoption as well ( e.g. amazon )

How NoSQL works ( with reference to mongoDB as an example for all points, and vs SQL )

  • what is mongoDB?
  • Basic structure of NoSQL databases
    • database -> collections -> documents hierachy
    • documents structure ( json )
  • Basic CRUD operation examples
    • Caveats - nesting limit, document size limit
  • Indexes
  • Schemas in NoSQL
  • Relation storage in NoSQL ( 1-1, 1-many, many-many )
  • Data processing ( mongoDB aggregation )
  • Horizontal scalability ( sharding )

How to get started with NoSQL?

  • Reinforce basic structure of NoSQL databases
  • Basic mongoDB query language
  • Advanced mongoDB processing ( aggregation, indexes, schemas, schema validation, etc )
  • Advanced topics: ( Where to go from here )
    • Why NoSQL is more easily horizontally scalable
    • Redundancy in NoSQL
    • Brief mention of in-memory NoSQL db ( redis )

Suggestions for grouping articles in the sidebar

I have a few suggestions for nesting/grouping articles in a way that I think makes more sense:

  • Move Databases and Security from Other Topics to SE Topics

  • Move Static Analysis into Code Quality

  • Rename SE Topics to Software Engineering Topics

  • Remove Project Management and move Agile Development and DevOps into SE Topics (DevOps isn't related to project management)

  • Remove Tools Useful for Software Engineers and move Regular Expressions into SE Topics

  • Move Writing Testable Code from Testing into Code Quality (the contents of that chapter are more closely related to code quality than testing)

  • Rename Architecture to Software Architecture

  • Move Scalability into Performance and rename the category to Scalability and Performance

  • Swap the order of SE Topics and App Frameworks

    So that the overall structure flows more smoothly:

    1. Programming Languages
    2. App Frameworks
    3. SE Topics
    4. Other Topics

introduction-to-python.md: doesn't cover differences between versions 2.7.x and 3.x

The introduction to Python learning resource article doesn't cover the differences between 2.7.x and 3.x.

As a piece of introductory material to Python, it might be a good idea to cover these differences.
Many beginners often question why there are two widely supported versions, and what the differences are.

(Personally I advocate the use of 3.x, and 2.7.x only for legacy reasons)

Improve SQL-injection page

My outline to improve the SQL-injection page:

What's SQL-injection:
Give an overview about SQL-injection.

Why preventing SQL-injection is important:

  • This kind of attack is well-known and easy to be established
  • This kind of attack causes serious consequences

How does SQL-injection work:

  • Introduce CIA (confidentiality, integrity, availability) which are aspects that computer security concerns.
  • Give concrete examples about how SQL-injection compromise all C, I, A.

How to prevent SQL-injection:

  • Common and easy way to prevent SQL-injection. Best practice in your next project.

Inconsistencies between VueJs, NodeJS and React

The chapters on VueJs, NodeJS and React are not consistent with each other (content and structure-wise).

Suggestion: Make all three chapters consistent structure-wise at least. And as far as possible content-wise too.

Introduction to C#

  • Why learn C#
  • How to use new features in C# 8 to write elegant code
  • Testing for C#
    • MSTest
    • NUnit

Web Performance

Outline (will work on these progressively, unlikely to cover all aspects in the first iteration):

  • Motivations for writing performant web applications
  • Metrics for web performance
    • TTFB
    • TTFP
    • TTI
  • Key factors to improving web performance
    • Javascript Bundle Optimisation
    • Lazy/Deferred/Progressive Loading
    • Asset Optimisation
    • Service Workers
    • Rendering Optimisation
  • Measuring Web Performance
    • Audit with Lighthouse
    • Tracking RUM

Introduction to NLP

  • Introduction to Natural Language Processing
    • What is NLP
    • Why learn NLP
      • Low barrier of entry
      • Wide array of applications
      • Unsaturated field of research
        • Advantages of being multilingual
    • Common applications of NLP
      • Intent detection
      • Information retrival
      • Enhanced UX
      • Machine translation
      • Natural Language Generation
    • How to get started

Use of word 'module' in javascript/javascript-modules#module-pattern confusing

Link:

https://deploy-preview-127--learningresources.netlify.com/contents/javascript/javascript-modules#module-pattern

image

JavaScript has modules already (as described in the section directly above). While the above code does make use of the module pattern (wrapping all related code inside one global), calling that a module just adds to the confusion with the already two different module systems: ES6 modules and CommonJS modules.

I propose we change rename module pattern to 'namespace pattern'
to better reflect what is going on: the reduction of global variables pollution by only creating one global variable, with all other functions and variables inside that object.

Fix broken links

Some links are broken. We should investigate to see whether the files have simply been moved and change the links accordingly or provide alternatives for material that has been removed or taken down.

The following excel sheet contains a list of broken links and their occurrences.
Broken Links.xlsx

Introduction to Testing in Java with JUnit 5

Rationale:
We currently do not have any resources directed at testing with JUnit 5. The SE-EDU Software Engineering for Self-Directed Learners book covers principles of testing (e.g. using stubs, differentiating between unit, integration and system tests), but does not cover how to write unit tests that make use of JUnit 5's powerful API library.
JUnit 5 has a wonderful user guide in place already, but (as I learnt from personal experience) the numerous terminologies would make it difficult for a new learner to Software Engineering to understand and make full use of the API.
Hence, I wish to write a book chapter that leverages on examples (that will be added to AB4 in the near future) and which bridges the theory in SE-EDU book with actual practice. This aims to be a good starting point of reference for future students aiming to write unit tests for a SE project in Java.

Outline:

  • What is JUnit 5
  • Basic JUnit 5 tests
  • Before/After methods and their use cases
  • JUnit 5 extension model

Using cryptography in your application

Rationale: The current introduction to cryptography provides a good overview of cryptography from a theorectical perspective. However, I feel that an equally important topic is how should we go about implementing cryptography in our applications, because incorrect implementation choices can lead to vulnerabilities in your application.

Could be an extension, but feel like the below is enough content for its own chapter.

Outline:

  • why encrypt your data
    • sensitive in plaintext, in case of breach
  • how to encrypt data in your application?
    • language libraries: JCE, System.Security.Cryptography
    • open source libraries: OpenSSL, NaCl, BouncyCastle, PyCrypto
  • how to choose good cryptographic primitives
    • RNGs, CSPRNGs
    • encryption algorithms
      • public key: RSA, ECC
      • secret key: AES, ChaCha20
    • authentication modes: MACs, AE crypto modes
    • key generation: PBKDF

Introduction to Test-Driven Development

Proposed outline:

  • Introduction
  • Development cycle
  • Benefits
  • Best practices
  • Comparison between other development workflows
  • Present scenario in the industry (an example/mini case study)
  • Limitations

Introduction to Redux

Proposed outline:

  • What is Redux
    • What is application state
  • How does Redux work
  • Why use Redux
  • Why not to use Redux
  • Alternative State Management solutions
  • Getting Started With Redux

Outline quite similar to React, since they are libraries used quite often together.

Add .NET to App Frameworks

.NET is a traditional platform used to develop Windows desktop applications. In recent years, with the help of the Mono project and Xamarin (formerly known as Xamarin Studio), .NET developer platform has been extended for building cross-platform apps on Android, iOS and MacOS as well. .NET also plays an important role in game development due to its use in Unity.

Introduction to Angular

Outline:

  • Overview
  • Advantages over other frameworks
  • Disadvantages
  • Present scenario in industry
  • Getting started
  • Other resources for learning Angular

Improve default parameters example

https://github.com/se-edu/learningresources/blob/master/contents/javascript/javascript.md#writing-reusable-javascript

The example:

// es5 syntax
function createPopUp(title, content, status, optionals) {
    var headerColor = optionals.headerColor || 'default';
    var bodyColor = optionals.bodyColor || 'default';
    ...
}
// es6 syntax with destructuring and default parameters
function createPopUp(title, content, status, optionals) {
    const { headerColor = 'default', bodyColor = 'default' } = optionals;
    ...
}

the destructuring is more declatively done like:

// es6 syntax with destructuring and default parameters
function createPopUp(title, content, status, {headerColor = 'default', bodyColor = 'default'}) {
    ...
}

Introduction to React

Outline:

  • Overview
  • Advantages
  • Disadvantages
  • Getting started
  • Other resources for learning

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.