Skip to content

Code-Society-Lab/resources

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

80 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Resources

A collection of resources built by members of the Code Society, now accessible as a website for a better experience.

Add an item to the list

To add an item to the list, follow this guide

Learning

Name Description
Becoming a self-taught coder for free Comprehensive guide on how to teach yourself programming for free
Developer Roadmaps Community-created roadmaps, articles, resources, and journeys to help you choose your path and grow in your career.
Embedded Engineering RoadMap This roadmap is designed to help beginners aspiring to build a career as an Embedded Engineer/Developer, as well as assist current practitioners in expanding their skills.
Open-Source RoadMap Tools and resources to help you get started with open source.
What is Embedded Systems & RoadMap This course is an hour-long presentation that dives into the details of 𝘄𝗵𝗮𝘁 𝗘𝗺𝗯𝗲𝗱𝗱𝗲𝗱 𝗘𝗺𝗯𝗲𝗱𝗱𝗲𝗱 𝗦𝘆𝘀𝘁𝗲𝗺𝘀 𝗶𝘀 𝗮𝗻𝗱 𝘁𝗵𝗲 𝗿𝗼𝗮𝗱𝗺𝗮𝗽 𝘁𝗼 𝗴𝗼𝗶𝗻𝗴 𝗮𝗯𝗼𝘂𝘁 𝗹𝗲𝗮𝗿𝗻𝗶𝗻𝗴 𝗶𝘁. The presentation is fast-paced and focused on how one can become an Embedded Systems Software Engineer.

Programming Languages

Assembly

Name Description
The Netwide Assembler (NASM) Tutorial to learn NASM Assembly Language
Learn NASM This manual documents NASM, the Netwide Assembler: an assembler targeting the Intel x86 series of processors, with a portable source.
ARM Assembly This resource provides exercises and lessons to introduce ARM assembly, covering key concepts and practical applications for both bare metal programming and interfacing with Linux systems.
Azeria ARM Assembly This ARM assembly basics tutorial series serves as a primer for ARM exploit development, covering topics like data types, registers, instruction sets, memory operations, branching, and functions, focusing on ARM 32-bit architecture and examples compiled on ARMv6.
Assembly Language Programming with ARM Learn assembly language programming with ARMv7 in this beginner's course.
Inline ASM Introduction on how to use inline assembly language in C code.
ARM Assembly instruction Sets A completely description of the ARM ASM instruction set.

C

Name Description
C by example This guide offers a user-friendly exploration of C and C++, highlighting their features and key differences in a progressive format, serving as an introduction or refresher without substituting for an in-depth study.
C Programming A Modern Approach A comprehensive and accessible guide that blends theory with practical examples to teach foundational concepts and advanced techniques in the C programming language.
Memory Allocation An introduction to the basics of memory allocation.
Modern C The C programming language, widely used in modern devices, is often misunderstood despite its ubiquity. This book aims to improve knowledge of C by organizing content into levels based on familiarity, focusing on unique C concepts and practices.

C++

Name Description
Learn C++ An easy to follow guide to starting off in C++
Core Guidelines Recommended guidelines for modern C++
CPP Reference Helpful reference material for the C++ and its standard library
Modern C++ The purpose of this book is to offer a quick start for modern C++. Of course, advanced readers can also use this book to review and examine themselves on modern C++.

Golang

Name Description
Go By Example Explore Go, a language for fast, reliable software, through official documentation and Go by Example's hands-on programs.

Python

Name Description
Python Python official website
Getting started Offical Python getting started guide
Learn Python An easy-to-follow guide to starting off in Python
Virtual environment Virtual environment
Python Tutorial Free open source site towards learning Python

Rust

Name Description
Interactive Book to kearn Rust Interactive book to learn about the Rust programming language.
Rust Cookbook Cookbook for Rust programmers, new and experienced, to learn about the Rust crate ecosystem.

Javascript

Name Description
Learn Javascript Online Free open-source site for learning modern Javascript through lessons and practical methods

Elixir

Name Description
Elixir Elixir official website
Elixir School Good starting point to learn and master Elixir
Unofficial Style guide Unofficial Elixir style guide
Code Smells in Elixir Understanding code smells in elixir functional language.

Libraries and Frameworks

Name Description
Phoenix Full-Stack Web framework
Absinthe GraphQL library

Computer Science

Data Structure

Name Description
Think Data Structure using Java Learn Data Structure concepts such as Array, LinkeList, HasMap, etc using Java.
Open Data Structure (available in Java, C++, and Pseudocode) Open Data Structures covers the implementation and analysis of data structures for sequences (lists), queues, priority queues, unordered dictionaries, ordered dictionaries, and graphs.

Algorithms

Name Description
Algorithms using Pseudocode The textbook is based on lecture notes created for algorithms classes at the University of Illinois, stemming from a major revision in 2016 to adapt to changes in the undergraduate theory curriculum, particularly emphasizing fundamental content for the new required junior-level theory course.
Algorithms for Competitive Programming Algorithms for competitive programming, covering topics like data structures, sorting, searching, dynamic programming, and graph algorithms.
Algorithms for Modern Hardware “Algorithms for Modern Hardware” by Sergey Slotin is a high-performance computing book for performance engineers, algorithm researchers, and advanced computer science students.

Programming Patterns and Design

Name Description
Game Programming Patterns Using Games as a reference point, this ebook covers tons of useful programming patterns
Gang of Four (GoF) Design patterns Detailed description and examples of multiple design patterns
Clean Code Principales, patterns and practices of writing clean code
Clean Architecture Building clean software architecture
Fundamentals of Software Architecture: An Engineering Approach Learn software architecture principles
Software Architecture: The Hard Parts: Modern Tradeoff Analysis for Distributed Architectures Learn in-depth analysis of software architectures
Model-View-Controller Explanation of the Model-View-Controller (MVC) architecture
The Non-Designer's Design Book This book is written for all the people who need to design pages, but have no
background or formal training in design.
Software Design Pattern DesignPatternsMastery offers a comprehensive collection of books on software design patterns for developers and architects.
Pattern of Software The essays in this book originated as columns for the Journal of Object-Oriented Programming, modeled after Samuel Johnson’s The Rambler.

Development

Interpreters

Name Description
Crafting Interpreters A deep dive into writing tree walking and bytecode interpreters
Make a Lisp (MAL) A step-by-step tutorial into making a list processing interpreter

Compilers

Name Description
Basic of Compiler Design An introduction to compiler design by Torben Ægidius Mogensen.

Development Tools

Name Description
Git Distributed version control system
Github for Beginner Github for Getting Started Guide
Git Tutorials Free open source site for learning Git basics and advanced patterns
Modern CMake Modern CMake is a clean, powerful, and elegant solution to many build system problems, allowing developers to focus on coding rather than dealing with unmaintainable build files.

Embedded Development

Name Description
Embedded Systems Security EmbeddedSecurity.io provide a beginners resource on embedded systems security
Putting the “You” in CPU Curious exactly what happens when you run a program on your computer? Read this article to learn how multiprocessing works, what system calls really are, how computers manage memory with hardware interrupts, and how Linux loads executables.
Practical Guide to Bare Metal C++ This document introduces several concepts that can be used in bare-metal development as well as shows how they can be implemented using features of the latest (at the time of writing) C++11 standard.
Bare-metal C programming on ARM This ebook is aimed at people who have an interest in low-level programming, and in seeing how to build a system from the ground up. Topics covered include system startup, driver development, and low-level memory management.
Intro to ARM Cortex-M An introduction to ARM Cortex-M controllers, covering their key characteristics, advantages, and applications. Followed by a comprehensive overview of the programmers' model.
RTEMS Document presents RTEMS features, installation, and example application building.

Web development

 Name Description
How to GraphQL Free open source tutorial to learn GraphQL
REST API Best practices Best practices for REST API design
The Copenhagen Book The Copenhagen Book is a free, open-source guide for implementing authentication in web applications.

Software Development

Name Description
How to build good software A guide to building good software
Professional Software Development Almost everything you’ll need to know to “hit the ground running.”
What every CS major should know A guide to the basics of computer science
About Warning & Undo Never use a warning when you mean undo, a guide to error handling
Free Software, Free Society A collection of writings essays by Richard Stallman. It introduces the subject of the history and development of the GNU Project and the Free Software Foundation, explains the author's philosophical position on the Free Software movement, and deals with the topics of software ethics, copyright, and patent laws, as well as business practices in application to computer software.
Element of Programming This book applies the deductive method to programming, presenting mathematical theories, algorithms, and theorems. It emphasizes the importance of precise code for computers and is intended for those seeking a deeper understanding of programming.

Other Resources

Operating Systems

Name Description
RTOS How-to articles about using real-time operating systems in embedded systems.
ZephyrOS The Zephyr OS is based on a small-footprint kernel designed for use on resource-constrained and embedded systems: from simple embedded environmental sensors and LED wearables to sophisticated embedded controllers, smart watches, and IoT wireless applications.
FreeRTOS A free-use Real Time Operating system widely used and supports many platforms.
FreeRTOS on STM32 Getting started with FreeRTOS in STM32 with Code Examples.
Operating Systems: Three Easy Pieces The book is centered around three conceptual pieces that are fundamental to operating systems: virtualization, concurrency, and persistence.

Databases

 Name Description
SQL Bolt Free open source site towards learning SQL
PostgreSQL The World's Most Advanced Open Source Relational Database.
ITTIA Embedded SQL The ITTIA DB SQL™ documentation provides how-to guidance and reference information for embedded systems to stream, manage, and analyze data, with an emphasis on time series. This documentation is for software developers who seek to embed a silent database inside applications.

DevOps

 Name Description
EDX Learn DevOps A site where there's a curated list of high-level courses towards DevOps that you can enroll to

ML / DL / AI

Name Description
Learn Deeplearning Free open source blog style tutorial on Deeplearning
Deep Learning for Coders with Fastai and PyTorch A free book (supplement for the below course) designed for people with some coding experience, who want to learn how to apply deep learning and machine learning to practical problems.
Practical Deep Learning A free course designed for people with some coding experience, who want to learn how to apply deep learning and machine learning to practical problems.
Learn Machine Learning A free 10-hour machine learning course for beginners on the freeCodeCamp.org YouTube channel.

Engineering

Name Description
Shape Up Shape Up will help you break free of “best practices” that aren’t really working, think deeper about the right problems, and start shipping meaningful projects your team can celebrate.
Build your Virtual Machine Tutorial on writing a virtual machine to run assembly language programs for a deeper understanding of computers and programming languages.
Probability for Computer Science Chris Piech wrote this book for Stanford’s CS109 course, Probability for Computer Scientists, originally designed by Mehran Sahami.

About

A collection of resources for various programming and software development subjects!

Resources

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 6