Finding my bearings

classic Classic list List threaded Threaded
14 messages Options
Reply | Threaded
Open this post in threaded view
|

Finding my bearings

bottomup2
This post was updated on .
My goal is to be able to understand computers to the point that if I wanted to build one from scratch AND I had the resources and other skills I would be able to.  I know that everyone has different definitions of from "scratch" so I want to make clear that by from "scratch" I mean starting from making the most basic thing that one would need to start building a computer and go from there.  That would consist of making a relay from scratch.  

I have a number of different skills that I have already and more that I am working on to enable me to do this but I already know what I need to learn.  That means using my Geology/prospecting skills to locate and identify the raw metal ores I will need in building the relay and battery.  Mining skills to extract them. Blacksmithing/Metallurgy skills to extract the metal itself, make the metal plates for the battery, and make the wire and switch for the relay.  Pottery skills to make the ceramic container to hold the primitive battery and finally my homesteading skills to make the charcoal from wood for the primitive lightbulb.  

Now, please mind you (and I will put this in all caps):

**I WILL NOT BE DOING THIS FROM SCRATCH IN THIS WAY THAT I AM DESCRIBING, I JUST WANT TO KNOW HOW TO DO IT THAT WAY AND MOST IMPORTANTLY HOW TO DESCRIBE IT THAT WAY**

I have to emphasize this point because some people I chat with in real life just will not keep that in mind.  So, now that you know how detailed I want to learn this, let's continue.

I had been searching the web for quite a while looking for some book or website that explains how computers work from scratch with the definition of scratch being what I described above.  A forum I came across recommended two books.  The first was "Code" by Charles Petzold and then they said after I read that book then read "TECS" by Noam Nisan.  

I have just finished reading Code by Petzold last night.  I feel like I learned quite a lot BUT I do have almost 50 pages worth of questions I wrote down in MS Word while I read the book.  (I am hoping someone here or on another forum can assist me with that since Petzold doesn't have a forum for his book.)  But anyway, my question is since the author of this book I assume visits this forum a lot, I have to ask:

1. Will the course of action that I am taking, using your book and Petzold's Code to learn how computers really work from scratch, result in me achieving my goal?  If not, what books or whatever am I missing?  I need to find my bearing here and know where I am and know that I am going in the right direction, etc.

2. You mention that the only prerequisite to read this book is to know any programming language.  I don't know any programming language, I only read Petzold's "Code" book.  Is that sufficient enough to where I will be able to read your book now?  

3. If you do not mind please what general advice do you have for what I am trying to do here?  I am not sure what is next because I don't know what I will know when I finish reading your book that I have in front of me now.  I'm not sure if I should begin to work on Linux from Scratch and at the same time Red Hat's Certification Program (self-study) next or what... ?

Thank you for your advice and guidance in advance.  I am awaiting your response here but I think I might just go ahead and start reading the book because the suspense is killing me.  

Edit:
I should also say that I feel that Petzold did a very good job in his book Code.  It started out really well but by about the last five or six chapters it got very messy and I did not think it was very well explained at all.  But I do still think he did a good job.  I just got really really lost at the end and also in some portions of the book throughout but nothing like at the end.
Reply | Threaded
Open this post in threaded view
|

Re: Finding my bearings

culchie
The building of the computer is covered in its entirety in the first 5 chapters.
You do not need to know a programming language for this part of the book.

You only need to do some programming for the later chapters which is where you
develop software for the computer.
Petzold wrote a great book.
But I think this book will answer a lot of the questions that you have after reading that.
Building a computer in TECs will increase your understanding in a way that just reading about
one can't.
From what you wrote, I think this book is right up your street.

Reply | Threaded
Open this post in threaded view
|

Re: Finding my bearings

bottomup2
Thank you for the reply, culchie.  I am still hoping admin here or what not can answer specifically the questions I put forth in my original post though.  

Reply | Threaded
Open this post in threaded view
|

Re: Finding my bearings

Shimon Schocken
Administrator
Culchie gave you an accurate answer. You need no prerequisite knowledge in order to build the hardware part of the Hack computer. You "just" have to follow chapters 1-5 and do projects 1-5.

You will not be able to build the rest of the computer system (assembler, VM, compiler, OS) until you learn programming. This is something that you have to do separately, e.g. take an Intro to CS course with Java or Python.

Having said that, I think that you will enjoy building the HW part only. You'll be able to write machine-level programs (in the Hack language) and watch them execute on the computer that you've built, which is cool.

All this has nothing to do with professional training such as the ones you mentioned (Redhat etc.). The TECS book and course give you important general knowledge, yet this knowledge is not directly applicable to professional training.  These are two separate things.

-- Shimon
Reply | Threaded
Open this post in threaded view
|

Re: Finding my bearings

bottomup2
Shimon Schocken wrote
All this has nothing to do with professional training such as the ones you mentioned (Redhat etc.). The TECS book and course give you important general knowledge, yet this knowledge is not directly applicable to professional training.  These are two separate things.
Yes, I understand that they are separate but my confusion is what do I do after I finish reading your book and (with the help of everyone here  ) understand it perfectly.  After reading your book, will I have ability and knowledge to successfully do Linux from Scratch (LFS) Red Hat with ease?  I ask this because there are books that teach Red Hat and LFS but they all assume some kind of prior knowledge.
Shimon Schocken wrote
You will not be able to build the rest of the computer system (assembler, VM, compiler, OS) until you learn programming. This is something that you have to do separately, e.g. take an Intro to CS course with Java or Python.
1. So, Petzold's "Code" is not sufficient then?  
please see below
bottomup2 wrote
2. You mention that the only prerequisite to read this book is to know any programming language.  I don't know any programming language, I only read Petzold's "Code" book.  Is that sufficient enough to where I will be able to read your book now?  
2. If not, can you please recommend the best language to learn in your opinion please.  I know 'best' is subjective but YOU did write this book and that makes you better equipped to recommend which programming language will perfect to learn in order to get the most from your book.  

3. In addition to the above, after you recommend the best language can you please recommend the absolute best book(s) or site to learn that language that does not assume absolutely any prior knowledge and teaches everything that is needed? (ie math, science or whatever)
Reply | Threaded
Open this post in threaded view
|

Re: Finding my bearings

cadet1620
Administrator
In reply to this post by bottomup2
bottomup2 wrote
My goal is to be able to understand computers to the point that if I wanted to build one from scratch AND I had the resources and other skills I would be able to.  I know that everyone has different definitions of from "scratch" so I want to make clear that by from "scratch" I mean starting from making the most basic thing that one would need to start building a computer and go from there.  That would consist of making a relay from scratch.  
You will need more than just relays.  You will also need basic electronic components like resistors, capacitors and inductors to generating timing signals and control noise.  RAM will be a major problem.  It is not practical to build even a small RAM with relays.  An 8K by 8 RAM would require 131,072 relays just to store the bits; many more would be needed for address decoding and data access.  The first practical RAMs were magnetic core memory.  It takes a lot of supporting analog electronics -- amplifiers and such -- to build core memory.
I had been searching the web for quite a while looking for some book or website that explains how computers work from scratch with the definition of scratch being what I described above.  A forum I came across recommended two books.  The first was "Code" by Charles Petzold and then they said after I read that book then read "TECS" by Noam Nisan.  
These books will give you a good background in how computer hardware works.  The TECS hardware chapters (1-6) guide you through the design of one type of computer.  There are many variations in computer architecture.

Computers without software are of no use.  I would suggest taking a break after TECS chapter 6 and learning some basic programming.  I have used an earlier version of Think Python to teach programming to middle/high school aged students.  The text is available online as a PDF.  (I used Python to write my TECS software tools.)

Another interesting book is How Computers Do Math.  This book will teach you how to do assembly language programming on a [simulated] computer with a somewhat different architecture than the TECS computer.  Although the tools for the book are available online, the text is only available as a dead tree.

My guess is that Linux from Scratch (I haven't looked at it in any detail) will not make sense until you have become a competent programmer.

A very good non-technical book about what's involved in the design and development of a new type of computer is The Soul of a New Machine by Tracy Kidder (1981).  There's a wiki page about the book.

--Mark
Reply | Threaded
Open this post in threaded view
|

Re: Finding my bearings

milythael
Unless I'm mistaken, Linux from Scratch has virtually nothing to do
with programming at all.  It is a DIY distro build.  Basically, it is
instructions on how to choose, setup, and install packages for a
custom Linux distribution completely from source builds.  I haven't
touched it since 2001-02, though, so maybe it has changed since then.
It can help you understand the philosophy behind the Linux/Unix OS and
understand all the packages that are required to work together.
Reply | Threaded
Open this post in threaded view
|

Re: Finding my bearings

cadet1620
Administrator
milythael wrote
Unless I'm mistaken, Linux from Scratch has virtually nothing to do
with programming at all.
Thanks for catching that.  I'm not sure what site I was remembering, but LFS is still as you described.

Mea culpa,
--Mark
Reply | Threaded
Open this post in threaded view
|

Re: Finding my bearings

bottomup2
cadet1620 wrote
You will need more than just relays.  You will also need basic electronic components like resistors, capacitors and inductors to generating timing signals and control noise.  RAM will be a major problem.  It is not practical to build even a small RAM with relays.  An 8K by 8 RAM would require 131,072 relays just to store the bits; many more would be needed for address decoding and data access.  The first practical RAMs were magnetic core memory.  It takes a lot of supporting analog electronics -- amplifiers and such -- to build core memory.
Yes and my goal is to learn all of this with the books I have bought and will purchase in the future based off of the recommendations of you all hopefully. :)

cadet1620 wrote
Computers without software are of no use.  I would suggest taking a break after TECS chapter 6 and learning some basic programming.  I have used an earlier version of Think Python to teach programming to middle/high school aged students.  The text is available online as a PDF.  (I used Python to write my TECS software tools.)
Ok, I see that this is available online.  So, I just want to make sure this is the best language to learn and this is the best guide to learn it with then?  Thank you!  

But do I read the latest version or an earlier version.  If an earlier version, then which one?  If the modern one, then I will get to reading it after I finish the hardware section of TECS.

milythael wrote
Unless I'm mistaken, Linux from Scratch has virtually nothing to do with programming at all.
cadet1620 wrote
My guess is that Linux from Scratch (I haven't looked at it in any detail) will not make sense until you have become a competent programmer.
Take a look here please:
http://www.linux.ie/articles/reviews/linuxfromscratch/

My reasoning for wanting to do LFS Red Hat and Gentoo is that based off of my goal of learning computers from scratch (but not actually doing per-say), I would have to build my system from scratch which is LFS Red Hat & Gentoo.  Or are you suggesting that I build my own OS system and forget LFS?  (although I don't think that's my goal here though...)  I'm not really trying to create anything new, I just want to know how it all works so I could recreate it if I wanted to, that's all.

Another question is based off of the reading/work I am doing when will I be a 'competent programmer'?  I am doing all this reading and buying books that are recommended to me faithfully but I need to put this together and know when I am ready for this or that. (ie LFS, Gentoo, Red hat, etc.)  I don't want to just spend my money on these books for nothing.  And I really am grateful for the authors of TECS for having this forum.  It means a lot to be able to converse with the author about his work.

cadet1620 wrote
Although the tools for the book are available online, the text is only available as a dead tree.
'dead tree' I'm not sure what you mean...?

cadet1620 wrote
Another interesting book is How Computers Do Math.  This book will teach you how to do assembly language programming on a [simulated] computer with a somewhat different architecture than the TECS computer.
cadet1620 wrote
A very good non-technical book about what's involved in the design and development of a new type of computer is The Soul of a New Machine by Tracy Kidder (1981).  There's a wiki page about the book.
Regarding your book recommendations in your post, which order do I read them?  You mentioned me needing to become a 'competent programmar' earlier as well, please mention any books that I need for that goal as well in your arrangement of your book recommendations if you don't mind.  That will make it easier for me to purchase all of the books at one time on Amazon. (cheaper shipping costs)  

Reply | Threaded
Open this post in threaded view
|

Re: Finding my bearings

cadet1620
Administrator
"Dead tree" is slang for a paper book, as opposed to an electronic version.

After the hardware chapters in TECS, I'd suggest:
  o  Learning Python using the latest version of the book,
  o  Doing the software chapters of TECS,
  o  Do "How Computers Do Math" after TECS so you don't get confused by the two different architectures.

I think that successfully writing the programs for the software part of TECS would indicate competence in the programming language you used.

"The Soul of a New Machine" is not directly related to learning this stuff; it's a historical perspective on the computer industry and R&D.  Google Books has a lot of it online here.

--Mark
Reply | Threaded
Open this post in threaded view
|

Re: Finding my bearings

bottomup2
1. Is my general assessment of LFS Gentoo correct though?  That is, that since I am building a computer from scrach (on paper), then the only way to build a distro from scratch is Linux From Scratch.  I have no other choice, I don't think.  I'm not sure if I could create my own though.  (hmm, does anyone even do that...?)

cadet1620 wrote
I think that successfully writing the programs for the software part of TECS would indicate competence in the programming language you used.
2. So after I finish the a.Python book, b.TECS, and then c."how computers do math" I should be able to finish Linux From Scratch with ease since I will be a competent programmer.  Correct?  

I will pass on "The Soul of a New Machine" for now since I already have too many books to purchase and study.

3. I have another question for you all.  I will be very active here posting questions and studying with all of you as you see now.  But like I mentioned above, I do have 50 pages of questions in MS Word about Petzold's Code book and some other books I read as well.  I don't know if I am allowed to post those questions here since they are related to another author's book and not TECS...  (is it allowed?)

I hope it is allowed but I still would like to get a real-life tutor here who is an expert like many of you to help me learn this.  I have searched on Craiglist in my city for "programming tutors" but I have not been able to find someone who fits the bill.  I don't mind paying $30-40 an hour, any ideals on where to find tutors for assistance outside of the internet.  If I can't find anyone then I will have to only use this forum and other forums that I am a part of for help. (which is fine but it would be nice to have a personal tutor while I have the extra income...)
Reply | Threaded
Open this post in threaded view
|

Re: Finding my bearings

Dano
I don't get your obsession with LFS. Is it because of the "from scratch" catchphrase? I would say LFS is essentially something like an IKEA manual. Do you think you will be a good carpenter if you read an IKEA manual?

bottomup2 wrote
...the only way to build a distro from scratch is Linux From Scratch.  I have no other choice, I don't think...
Your statement is incorrect. Linux is not the only system out there, nor does every Linux distro originate from LFS (Just to clarify, I've been using Linux for about 6 years on a daily basis)

bottomup2 wrote
So after I finish the a.Python book, b.TECS, and then c."how computers do math" I should be able to finish Linux From Scratch with ease since I will be a competent programmer.  Correct?  
How can you expect to be a "competent programmer" after reading a bunch of books? Surely, this must be a bad joke. Practice makes the master!

Edit: There are automated scripts to make LFS. There is nothing intellectual in it, unless you are the person who wrote the book.
Reply | Threaded
Open this post in threaded view
|

Re: Finding my bearings

bottomup2
Dano wrote
I don't get your obsession with LFS. Is it because of the "from scratch" catchphrase? I would say LFS is essentially something like an IKEA manual. Do you think you will be a good carpenter if you read an IKEA manual?
I will go with your example since carpentry is an another separate area that I am studying with the craftsmen in my area.  My approach with carpentry is as I described above in my very first approach.  Namely, locate raw materials, extract them, make tools out of them and then make more carpenter's tools out of those tools to use on the job.  With that said (and assuming you are keeping everything in mind that has been posted here until now), what do you suggest?  

I kind of think you are referring to this though:
http://www.instructables.com/id/Create-your-own-operating-system/
the above link wrote
Nearly every true computer geek has, at some point, wanted to write an operating system. However, writing a custom kernel and other bits takes years of study, experience and patience. If you intend to keep your sanity, then the best course of action is to use someone else's code.
This is where I am at.  As I have continually stated, I do not want to actually make anything new, I just want to have the ability to do so.  So, as the individual in the above link wrote, the next best thing is to use someone else's code BUT just make sure that I understand every line of his code.  That's all.  Not just blindly copy and paste since their is nothing intellectual in that as you stated. (and I agree) :)  I do hope it is more clear now because I understand your concern and I want to make sure that I am on the right track here.

Dano wrote
Edit: There are automated scripts to make LFS. There is nothing intellectual in it, unless you are the person who wrote the book.
I do not plan to do the automated version.  I want to work hard and learn everything I can. :)
Reply | Threaded
Open this post in threaded view
|

Re: Finding my bearings

cadet1620
Administrator
In reply to this post by bottomup2
MODERATORS NOTE:

I think that we are getting too far afield from TECS.  This forum should be focused on supporting students in courses using the TECS book and independent learners working their way through the TECS book.

I would suggest starting your own blog, or nabble.com forum for your questions list.  Post a link to it here and people on this forum with time and inclination could answer your questions there.

I would also suggest checking out DIY Computer Science.