Code Monkey home page Code Monkey logo

how_to_learn_modern_linux's Introduction

How to learn modern Linux

A simple but long path to the intrepid adventurer.

Description

Unix as a family of systems, is one of the greatest bodies of intellectual work ever achieved by the human mind! It was the brainchild of Ken Thompson in 1969, because he wanted to play a simple game called Space Travel that he had developed for Multics, and he wanted to be able to run the program in a small computer of its own! With the help of Dennis Ritchie and many others it was born at the Bell Labs and quickly became, in several ways, a creature of all mankind! A free bird to fly by its own means and to be used as a tool for whoever wishes to learn deeper its ways of working. It's a coherent agglomerate of different technologies that never gets old and like a Fenix, re-borns from the ashes.

The objective of this How to

The objective of this How to is to be a small guide, to give anyone a path to becoming a Linux in depth knowledge person.

The general path that we will follow ... explore and discover

First, you will need to have a Linux installed. You should start with Ubuntu Linux, preferably in a secondary machine (or virtual machine [Virtual Box]). Install it and play normally with it, as if it would be your main machine. Play with it for 3 months all days, explore and discover. By then, you will find that you are really comfortable with your Linux Ubuntu system, then, think if you are ready to make it your main system for everyday use. If you are, then install it on your main system and use it all day long, continue to explore and to discover. Then in your secondary machine, install the Debian distribution (rock solid distro) with gnome once, and then with KDE, and use it for 3 months to get a real feeling for it, learn it inside out. Then install an Arch system with rolling release for 3 months. Do all the process of installation and get into all the details that make Linux work and how it works. Go in depth into Linux. Learn to fix it when it breaks. Then choose what you want to install on your main system: a Debian, a Arch Linux or if you would like to try another distro out there. By this time you will be a more knowledgeable person and you could decide your next move.

You should, from the start, embark on a reading and studying journey, the path is listed below and some of the reading material is listed below.

The major steps are:

  1. Learn and appreciate the history of Unix, Linux, GNU, X, FreeBSD and C
  2. Learn by reading the documentation of the 3 major distros Ubuntu, Debian and Arch linux
  3. Learn to use the shell, and more specific the bash
  4. Learn how to navigate with the most common editors, vi and Emacs, learn what they represent in context, and learn other editors
  5. Learn system administration
  6. Learn how Linux internals works
  7. Learn about open source and the major software and hardware licenses
  8. Learn how to program on Linux
  9. Craftsmanship and software design
  10. Learn how systems programming works
  11. Linux kernel development
  12. Hardware knowledge
  13. Artificial Intelligence and Machine Learning
  14. Learn Raspberry Pi and embedded Linux
  15. FreeBSD knowledge
  16. Do the NAND To Tetris challenge in Rust, C, C++, GO or Python
  17. Become an enlightened person in terms of Linux and use it to accomplish your goals in a better way

1. Learn and appreciate the history of Unix, Linux, GNU, X, FreeBSD and C

2. Learn by reading the documentation of the 3 major distros Ubuntu, Debian and Arch linux

3. Learn to use the shell, and more specific bash

4. Learn how to navigate with the most common editors, vi and Emacs, learn what they represent in context, and learn other editors

5. Learn system administration

  • Linux Command Line and Shell Scripting Bible 4th Edition
    by Richard Blum Christine Bresnahan

  • Linux Bible 10th Edition
    by Christopher Negus

  • UNIX and Linux System Administration Handbook 5th Edition
    by Evi Nemeth, Garth Snyder, Trent Hein, Ben Whaley, Dan Mackin

  • The Debian Administrator's Handbook
    by Raphael Hertzog, Roland Mass
    https://www.debian.org/doc/manuals/debian-handbook/

  • Wicked Cool Shell Scripts
    by Dave Taylor, Brandon Perry

6. Learn how Linux internals works

  • How Computers Really Work A Hands-On Guide to the Inner Workings of the Machine
    by Matthew Justice

  • How Linux Works What Every Superuser Should Know, 3th Edition
    by Brian Ward

7. Learn about open source and the major software and hardware licenses

8. Learn how to program on Linux

C, C++ and Rust can use the following tools.

9. Craftsmanship and software design

  • The Pragmatic Programmer: Your Journey To Mastery, 20th Anniversary Edition - 2nd Edition
    by David Thomas, Andrew Hunt

  • The Practice of Programming
    by Brian Kernighan, Rob Pike

  • Clean Code: A Handbook of Agile Software Craftsmanship
    by Robert C. Martin

  • The Clean Coder: A Code of Conduct for Professional Programmers
    by Robert Martin

  • Video - Object Oriented Design - Derek Banas
    https://www.youtube.com/playlist?list=PLGLfVvz_LVvS5P7khyR4xDp7T9lCk9PgE

  • Video - UML 2.0 Tutorial - Derek Banas
    https://www.youtube.com/playlist?list=PLGLfVvz_LVvQ5G-LdJ8RLqe-ndo7QITYc

  • Video - Design Patterns Tutorial - Derek Banas
    https://www.youtube.com/playlist?list=PLF206E906175C7E07

  • Video - Code Refactoring - Derek Banas
    https://www.youtube.com/playlist?list=PLGLfVvz_LVvSuz6NuHAzpM52qKM6bPlCV

  • Design Patterns: Elements of Reusable Object-Oriented Software
    by Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides, Grady Booch

  • Head First Design Patterns
    Building Extensible and Maintainable Object-Oriented Software 2nd Edition
    by Eric Freeman, Elisabeth Robson

  • Clean Architecture: A Craftsman's Guide to Software Structure and Design
    by Robert Martin

  • Grokking Algorithms: An Illustrated Guide for Programmers and Other Curious People
    by Aditya Bhargava

  • Introduction to Algorithms, 3rd Edition
    by Thomas H. Cormen

  • The Art of Computer Programming, Volumes 1-4A + Facicles
    by Donald Knuth and Donald John Fuller

  • The Art of Multiprocessor Programming 2nd Edition
    by Maurice Herlihy, Nir Shavit, Victor Luchangco, Michael Spear

  • C++ Concurrency in Action 2nd Edition
    by Anthony Williams

10. Learn how systems programming works

  • The Linux programming interface a Linux and UNIX system programming handbook
    by Michael Kerrisk

  • Video - Linux System Programming 6 Hours Course
    https://www.youtube.com/watch?v=6OSeJFo6GOc

  • Operating Systems Three Easy Pieces
    by Remzi H Arpaci-Dusseau, Andrea C Arpaci-Dusseau
    http://pages.cs.wisc.edu/~remzi/OSTEP/

  • Linux system programming talking directly to the kernel and C library
    by Robert Love

  • Advanced Programming in the UNIX Environment
    by W. Richard Stevens, Stephen A. Rago

  • Systems Programming in Unix/Linux
    by K. C. Wang

  • Autotools A practitioners guide to GNU Autoconf, Automake, and Libtool
    by John Calcote

  • Linux Device Drivers, 3th Edition
    https://lwn.net/Kernel/LDD3/

  • Mastering Linux Device Driver Development
    Write custom device drivers to support computer peripherals in Linux operating systems
    by John Madieu

  • Computer Systems A Programmer’s Perspective
    by Randal E. Bryant David R. O’Hallaron

  • Computer Networking A Top-Down Approach, 7th Edition
    by James Kurose, Keith Ross

  • The Illustrated Network How TCPIP Works in a Modern Network
    by Walter Goralski

  • Compilers: Principles, Techniques, and Tools
    by Alfred Aho, Monica Lam, Ravi Sethi

  • Crafting Interpreters
    by Robert Nystrom 
    https://craftinginterpreters.com

  • Writing An Interpreter In Go
    by Thorsten Ball

  • Writing A Compiler In Go
    by Thorsten Ball

  • C++ System Programming Cookbook Practical recipes for Linux system-level programming using the latest C++ features
    by Onorato Vaticone

  • How to learn modern Rust
    https://github.com/joaocarvalhoopen/How_to_learn_modern_Rust

11. Linux kernel development

  • Understanding the Linux Kernel, Third Edition 3rd Edition
    by Daniel P. Bovet, Marco Cesati

  • Linux Kernel Development 3rd Edition
    by Robert Love

  • Linux Kernel Programming: A comprehensive guide to kernel internals, writing kernel modules, and kernel synchronization
    by Kaiwan N Billimoria

12. Hardware knowledge

13. Artificial Intelligence and Machine Learning

  • How to learn modern Machine Learning
    https://github.com/joaocarvalhoopen/How_to_learn_modern_Machine_Learning

  • The Hundred-Page Machine Learning Book
    by Andriy Burkov

  • scikit-learn - Machine Learning in Python
    https://scikit-learn.org/

  • Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow: Concepts, Tools, and Techniques to Build Intelligent Systems 2nd Edition
    by Aurélien Géron

  • PyTorch Tutorials
    https://pytorch.org/tutorials/

  • Deep Learning with PyTorch: Build, train, and tune neural networks using Python tools
    by Eli Stevens, Luca Antiga, Thomas Viehmann

  • CUDA - Programming Massively Parallel Processors: A Hands-on Approach 3rd Edition
    by David B. Kirk, Wen-mei W. Hwu

14. Learn Raspberry Pi and embedded Linux

  • Raspberry Pi User Guide 4th Edition
    by Eben Upton, Gareth Halfacree

  • Programming the Raspberry Pi, Second Edition: Getting Started with Python 2nd Edition
    by Simon Monk

  • Raspberry Pi Cookbook: Software and Hardware Problems and Solutions 3rd Edition
    by Simon Monk

  • Practical Python Programming for IoT
    Build advanced IoT projects using a Raspberry Pi 4, MQTT, RESTful APIs, WebSockets, and Python 3 by Gary Smart

  • Operating Systems Foundations with Linux on the Raspberry Pi
    by Wim Vanderbauwhede, Jeremy Singer

  • Learning Computer Architecture with Raspberry Pi
    by Eben Upton, Jeffrey Duntemann, Ralph Roberts, Tim Mamtora, Ben Everard

  • Exploring Raspberry Pi: Interfacing to the Real World with Embedded Linux
    by Derek Molloy

  • Programming with 64-Bit ARM Assembly Language: Single Board Computer Development for Raspberry Pi and Mobile Devices
    by Stephen Smith

  • Exploring BeagleBone: Tools and Techniques for Building with Embedded Linux 2nd Edition
    by Derek Molloy

  • Linux Driver Development for Embedded Processors - Second Edition: Learn to develop Linux embedded drivers with kernel 4.9 LTS
    by Alberto Liberal de los Ríos

  • Embedded Linux Systems with the Yocto Project
    by Rudolf Streif

  • Mastering Embedded Linux Programming: Unleash the full potential of Embedded Linux with Linux 4.9 and Yocto Project 2.2 (Morty) Updates, 2nd Edition
    by Chris Simmonds

15. FreeBSD knowledge

  • Absolute FreeBSD, 3rd Edition: The Complete Guide to FreeBSD
    by Michael W. Lucas

  • The Design and Implementation of the FreeBSD Operating System
    by Marshall McKusick, George Neville-Neil, et al

  • FreeBSD Device Drivers: A Guide for the Intrepid
    by Joseph Kong

16. Do the NAND To Tetris challenge in Rust, C, C++, GO or Python

  • Building a Modern Computer From First Principles
  1. From Nand to Tetris
    https://www.nand2tetris.org/

  2. Video - Shimon Schocken: The self-organizing computer course
    https://www.youtube.com/watch?v=iE7YRHxwoDs

  3. Video - From Nand to Tetris Part I Course Promo
    https://www.youtube.com/watch?v=wTl5wRDT0CU

  4. Free Course - Build a Modern Computer from First Principles
    From Nand to Tetris (Project-Centered Course)
    https://www.coursera.org/learn/build-a-computer

  5. Free Course - Build a Modern Computer from First Principles
    Nand to Tetris Part II (project-centered course)
    https://www.coursera.org/learn/nand2tetris2

17. Become an enlightened person in terms of Linux and use it to accomplish your goals in a better way

  • You will never achieve the complete nirvana, because there will always be something new to learn, and that is something good, but you will become more close to it and to enlightenment.

All my other guides

Have fun

Best regards,
João Nuno Carvalho

how_to_learn_modern_linux's People

Contributors

joaocarvalhoopen avatar

Watchers

 avatar

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.