How_to_program_from_ground_up
所属分类:视频捕捉采集剪辑
开发工具:kotlin
文件大小:0KB
下载次数:0
上传日期:2024-02-13 09:11:06
上 传 者:
sh-1993
说明: 关于从底层开始学习编程的视频系列的大纲
(Outline for the video series about learning to program from the bottom first)
文件列表:
.idea/
assets/
gradle/wrapper/
src/main/kotlin/
02-TheEssentialQuestion-WhatAreWeComputing.md
03-Hardware.md
04-DataStructures.md
05-Software.md
06-HighLevelLanguages.md
07-SoftwareDesign.md
08-StructuredProgramming.md
09-ClassOrientedProgramming.md
10-BackToObjectOrientedProgramming.md
11-FunctionalProgramming.md
12-ParallelProcessing.md
13-Conclusion.md
build.gradle.kts
gradle.properties
gradlew
gradlew.bat
img.png
mermaid_test.md
settings.gradle.kts
# How to Program From The Ground Up with Minimal BS
- [Introduction](https://github.com/realityexpander/How_to_program_from_ground_up/blob/master/#introduction)
- [The Essence of Computing](https://github.com/realityexpander/How_to_program_from_ground_up/blob/master/02-TheEssentialQuestion-WhatAreWeComputing)
- [Hardware](https://github.com/realityexpander/How_to_program_from_ground_up/blob/master/03-Hardware)
- Using Natural Phenomenon to Represent Human Information
- [The Wire & the Light Bulb & the Battery](https://github.com/realityexpander/How_to_program_from_ground_up/blob/master/03-Hardware#the-wire--the-battery)
- [The Simple Switch](https://github.com/realityexpander/How_to_program_from_ground_up/blob/master/03-Hardware#the-simple-switch)
- [The Magnificent Magnet](https://github.com/realityexpander/How_to_program_from_ground_up/blob/master/03-Hardware#the-magnificent-electromagnet)
- [The Raucous Relay](https://github.com/realityexpander/How_to_program_from_ground_up/blob/master/03-Hardware#the-raucous-relay)
- [The Voracious Vacuum Tube](https://github.com/realityexpander/How_to_program_from_ground_up/blob/master/03-Hardware#the-voracious-vacuum-tube)
- [The Tiny Transistor](https://github.com/realityexpander/How_to_program_from_ground_up/blob/master/03-Hardware#the-tiny-transistor)
- [The Interchangeable Integrated Chip (IC)](https://github.com/realityexpander/How_to_program_from_ground_up/blob/master/03-Hardware#the-interchangeable-integrated-chip-ic)
- [The Mighty Microprocessor](https://github.com/realityexpander/How_to_program_from_ground_up/blob/master/03-Hardware#the-mighty-microprocessor)
- [Data Structures](https://github.com/realityexpander/How_to_program_from_ground_up/blob/master/04-DataStructures)
- How Humans Represent Data in Binary in Computers
- [Numbers](https://github.com/realityexpander/How_to_program_from_ground_up/blob/master/04-DataStructures.md#numbers)
- [Characters](https://github.com/realityexpander/How_to_program_from_ground_up/blob/master/04-DataStructures.md#characters)
- [Array](https://github.com/realityexpander/How_to_program_from_ground_up/blob/master/04-DataStructures.md#array)
- [String](https://github.com/realityexpander/How_to_program_from_ground_up/blob/master/04-DataStructures.md#string)
- [Pointer](https://github.com/realityexpander/How_to_program_from_ground_up/blob/master/04-DataStructures.md#pointer)
- ["Data Structures"](https://github.com/realityexpander/How_to_program_from_ground_up/blob/master/04-DataStructures.md#data-structures)
- [Stack](https://github.com/realityexpander/How_to_program_from_ground_up/blob/master/04-DataStructures.md#stack)
- [Queue](https://github.com/realityexpander/How_to_program_from_ground_up/blob/master/04-DataStructures.md#queue)
- [Linked List](https://github.com/realityexpander/How_to_program_from_ground_up/blob/master/04-DataStructures.md#linked-list)
- [Map](https://github.com/realityexpander/How_to_program_from_ground_up/blob/master/04-DataStructures.md#map)
- [Tree](https://github.com/realityexpander/How_to_program_from_ground_up/blob/master/04-DataStructures.md#tree)
- [Software](https://github.com/realityexpander/How_to_program_from_ground_up/blob/master/05-Software.md)
- [Machine Code](https://github.com/realityexpander/How_to_program_from_ground_up/blob/master/05-Software.md#machine-code)
- [Representation of Data in Computer Memory](https://github.com/realityexpander/How_to_program_from_ground_up/blob/master/05-Software.md#representation-of-data)
- [Binary Counting](https://github.com/realityexpander/How_to_program_from_ground_up/blob/master/05-Software.md#binary-counting)
- [Hexadecimal Counting](https://github.com/realityexpander/How_to_program_from_ground_up/blob/master/05-Software.md#hexadecimal-counting)
- [Standardized ASCII](https://github.com/realityexpander/How_to_program_from_ground_up/blob/master/05-Software.md#standardized-ascii)
- [The Minimum Components of a Computer System](https://github.com/realityexpander/How_to_program_from_ground_up/blob/master/05-Software.md#minimum-components)
- [The CPU/MPU](https://github.com/realityexpander/How_to_program_from_ground_up/blob/master/05-Software.md#the-cpumpu)
- [The Clock](https://github.com/realityexpander/How_to_program_from_ground_up/blob/master/05-Software.md#the-clock)
- [Program Counter](https://github.com/realityexpander/How_to_program_from_ground_up/blob/master/05-Software.md#program-counter)
- [Common Machine Language Opcodes](https://github.com/realityexpander/How_to_program_from_ground_up/blob/master/05-Software.md#common-opcodes)
- [Fetch-Decode-Execute Cycle of the CPU](https://github.com/realityexpander/How_to_program_from_ground_up/blob/master/05-Software.md#fetch-decode-execute-cycle)
- [Registers](https://github.com/realityexpander/How_to_program_from_ground_up/blob/master/05-Software.md#registers)
- [Arithmetic Logic Unit (ALU)](https://github.com/realityexpander/How_to_program_from_ground_up/blob/master/05-Software.md#alu)
- [Control Unit](https://github.com/realityexpander/How_to_program_from_ground_up/blob/master/05-Software.md#control-unit)
- [Assembly Language](https://github.com/realityexpander/How_to_program_from_ground_up/blob/master/05-Software.md#assembly-language)
- [Common Assembly Language Operations](https://github.com/realityexpander/How_to_program_from_ground_up/blob/master/05-Software.md#common-assembly-operation)
- [Variables](https://github.com/realityexpander/How_to_program_from_ground_up/blob/master/05-Software.md#variables)
- [Subroutines](https://github.com/realityexpander/How_to_program_from_ground_up/blob/master/05-Software.md#subroutines)
- [High-Level Languages](https://github.com/realityexpander/How_to_program_from_ground_up/blob/master/06-HighLevelLanguages.md#high-level-languages)
- [Programming Styles](https://github.com/realityexpander/How_to_program_from_ground_up/blob/master/06-HighLevelLanguages.md#programming-styles)
- [Procedural Programming](https://github.com/realityexpander/How_to_program_from_ground_up/blob/master/06-HighLevelLanguages.md#procedural-programming)
- [Problem: Abusing GOTO](https://github.com/realityexpander/How_to_program_from_ground_up/blob/master/06-HighLevelLanguages.md#problem-abusing-goto)
- [Solution: Subroutines](https://github.com/realityexpander/How_to_program_from_ground_up/blob/master/06-HighLevelLanguages.md#solution-subroutines)
- [Problem: Naive Solutions](https://github.com/realityexpander/How_to_program_from_ground_up/blob/master/06-HighLevelLanguages.md#problem-naive-solutions)
- [Problem: Imperative Looping](https://github.com/realityexpander/How_to_program_from_ground_up/blob/master/06-HighLevelLanguages.md#problem-imperative-looping)
- [Solution: Declaritive Looping](https://github.com/realityexpander/How_to_program_from_ground_up/blob/master/06-HighLevelLanguages.md#solution-declaritive-for-loop)
- [Software Design](https://github.com/realityexpander/How_to_program_from_ground_up/blob/master/07-SoftwareDesign.md)
- [Algorithms](https://github.com/realityexpander/How_to_program_from_ground_up/blob/master/07-SoftwareDesign.md#algorithms)
- [Time Complexity](https://github.com/realityexpander/How_to_program_from_ground_up/blob/master/07-SoftwareDesign.md#time-complexity)
- [Shorthand Guide & Sample Code](https://github.com/realityexpander/How_to_program_from_ground_up/blob/master/07-SoftwareDesign.md#time-complexity-example)
- [Communicating Software Designs Visually](https://github.com/realityexpander/How_to_program_from_ground_up/blob/master/07-SoftwareDesign.md#communicating-software-designs)
- [Structured Programming](https://github.com/realityexpander/How_to_program_from_ground_up/blob/master/08-StructuredProgramming.md)
- [Scopes](https://github.com/realityexpander/How_to_program_from_ground_up/blob/master/08-StructuredProgramming.md#scopes)
- [Types](https://github.com/realityexpander/How_to_program_from_ground_up/blob/master/08-StructuredProgramming.md#types)
- [Class Oriented Programming](https://github.com/realityexpander/How_to_program_from_ground_up/blob/master/09-ClassOrientedProgramming.md)
- [COP Tried to Introduce a New Style of Programming, But Ended With Mixed Results](https://github.com/realityexpander/How_to_program_from_ground_up/blob/master/09-ClassOrientedProgramming.md#cop-tried-to-introduce)
- [Encapsulation](https://github.com/realityexpander/How_to_program_from_ground_up/blob/master/09-ClassOrientedProgramming.md#encapsulation)
- [Using Classes and Objects as "Name-Spaces/Scopes" Lead to Procedural-Style Code Implementations](https://github.com/realityexpander/How_to_program_from_ground_up/blob/master/09-ClassOrientedProgramming.md#using-classes-and-objects-as-name-spaces)
- [Problems Arising from Abusing Static Methods and Attributes](https://github.com/realityexpander/How_to_program_from_ground_up/blob/master/09-ClassOrientedProgramming.md#problems-arising-from-abusing-static)
- [Interfaces](https://github.com/realityexpander/How_to_program_from_ground_up/blob/master/09-ClassOrientedProgramming.md#interfaces)
- [Inheritance](https://github.com/realityexpander/How_to_program_from_ground_up/blob/master/09-ClassOrientedProgramming.md#inheritance)
- [Problems Arising from the Abuse of Inheritance](https://github.com/realityexpander/How_to_program_from_ground_up/blob/master/09-ClassOrientedProgramming.md#problems-arising-from-the-abuse-of-inheritance)
- [Abstract Classes](https://github.com/realityexpander/How_to_program_from_ground_up/blob/master/09-ClassOrientedProgramming.md#abstract-classes)
- [Polymorphism](https://github.com/realityexpander/How_to_program_from_ground_up/blob/master/09-ClassOrientedProgramming.md#polymorphism)
- [Controlled Visibility of Variables and Methods](https://github.com/realityexpander/How_to_program_from_ground_up/blob/master/09-ClassOrientedProgramming.md#controlled-visibility)
- [Allowing for "Multiple Inheritance" in C++ was a mistake, and it was removed from Java and C# for very good reasons](https://github.com/realityexpander/How_to_program_from_ground_up/blob/master/multiple-inheritance-removed)
- [Design Patterns](https://github.com/realityexpander/How_to_program_from_ground_up/blob/master/09-ClassOrientedProgramming.md#design-patterns)
- [Back-to-Object Oriented Programming](https://github.com/realityexpander/How_to_program_from_ground_up/blob/master/10-BackToObjectOrientedProgramming.md)
- [Banned Patterns in BOOP](https://github.com/realityexpander/How_to_program_from_ground_up/blob/master/banned-patterns-in-boop)
- [Why is Class-Oriented Programming (COP)](https://github.com/realityexpander/How_to_program_from_ground_up/blob/master/10-BackToObjectOrientedProgramming.md#why-is-cop-bad)
- [Back-to Object Oriented Programming Example](https://github.com/realityexpander/How_to_program_from_ground_up/blob/master/10-BackToObjectOrientedProgramming.md#boop-example)
- [Functional Programming](https://github.com/realityexpander/How_to_program_from_ground_up/blob/master/11-FunctionalProgramming.md)
-
## Introduction
- How to guide for budding software engineers who need a primer overview of software development concepts
from the fundamentals of physical logic representation to high-level programming languages.
- ### The goal is to have you
- understand more the `why` and `how` of programming, not just the `what` and `where`.
- This is my curated list of information to take you on a realistic and grounded journey of understanding
the essential part of computing to create effective software.
- There will be some technical details, but only enough to understand the fundamental principles, not to be an expert.
- I cover the areas that I had difficulty understanding when I was learning to program.
- This is more-or-less a historical walk through `WHY` things are the way they are in computing, and `HOW` they came to be that way.
> I have since discovered that the majority of my confusion derived from how things were presented to me.
> Instructors often completely misunderstood correct application and limits of metaphors and lacked real-world
> experience of the things they were teaching. Many just repeated what they were taught without understanding.
> When challenged about their knowledge, they would often become defensive and dismissive, and sometimes even hostile.
> Many of the concepts are, in retrospect, full of needless jargon and unnecessary complexity. I now understand that
> the complexity was often used to make the instructor seem more knowledgeable and to make the subject seem more
> difficult than it actually is.
> I would like to say at the outset that there is a TREMENDOUS number of technical-sounding words with all
> referring to the same basic core ideas. I will do my best to be as consistent as possible, and also work to
> point out the multiple definitions and reduce the jargon and clarify the core meanings and ideas.
## The Essence of Computing
- People used to do all computing by hand, and now we use various machines to do the same thing,
in a much faster and more reliable way.
- When we use a machine to do computing, we are just using the machine to represent the problem and the
solution in a different way.
- The machine knows nothing about the problem. it's only following orders created by clever humans using
boolean logic to represent the problem and its sequence of actions to solve it.
- Each operation in the computer was once done by teams of people working in groups, logically delineated in
nearly the same way as the computer's components are arranged.
- There were specialized roles for each person, for example, the "storage" would be a set of filing cabinets
and a clerk to store and retrieve them.
- This is now done by the "hard drive" and the "file system" in the computer.
- The arithmetic would be done by a person called a "calculator" who would perform the operations and record the results.
- This is now done by the "Arithmetic Logic Unit" and stored in the "Registers" in the computer.
## SOME IMPORTANT ITEMS TO KEEP IN MIND
- THERE IS NO MAGIC IN COMPUTING, ONLY _HUMAN_ CLEVERNESS, _HUMAN_ SYSTEMIC THINKING AND _HUMAN_ INGENUITY
USED TO SOLVE _HUMAN_ PROBLEMS.
- If you hear anyone say _"it's magic"_ or _"it's a black box"_ or _"it's kind of like a person,"_
they are:
1) Being lazy,
2) Or indicating it's not relevant at the moment,
3) Or (USUALLY) they don't understand the problem or the solution enough to explain it and become hand-wavy.
- ### ITS ALWAYS JUST _HUMAN_ CLEVERNESS AND INGENUITY, THE IDEA OF REPRESENTING ONE THING AS ANOTHER, NOTHING MORE.
- The machines CAN _NEVER_ UNDERSTAND the problem or the solution in the way humans conceive of the problem.
- These machines are only following the logical operations that humans have carefully designed to represent
the problem and a solution "space." There is no inherent "understanding" in the machine, and can never be.
- The only way the machine would ever know the full human context of the problem (and the solution) is if
the machine ACTUALLY was a human, and then it would be a _human_, and not a machine.
- Mistaking the machine for having intelligence is known as "The Eliza Effect" and is a common mistake
made by people who don't understand the limits of the machine's capabilities.
- [Continue Reading - The Essential Question](https://github.com/realityexpander/How_to_program_from_ground_up/blob/master/02-TheEssentialQuestion-WhatAreWeComputing.md)
- [Back to Index](https://github.com/realityexpander/How_to_program_from_ground_up/blob/master/README.md)
近期下载者:
相关文件:
收藏者: