Click here to Skip to main content
15,867,686 members
Please Sign up or sign in to vote.
4.20/5 (5 votes)
See more:
I don't know if this is the right place to ask the question..but i hope it is.

I am a jr. Software Engineer, and i know my C#, JAVA, VB, etc...
That is cool and all, but i have a thirst for knowledge!

I would like to know from start to end...how a computer works.
And i don't mean...power -> bios -> post -> OS Load

I want to know how a motherboard knows to load the BIOS...heck how does the computer even go from just hardware with electricity running through it to being able to to run machine code.

I want to know it all!

And yes i know people go to school for years, and years.....and years to learn this stuff. Because this goes into Computer and Software Engineering.

I want to program my own OS, from scratch. And to do this, i figured it would be best to know how everything works first. Heck, it would look amazing on a resume to say i know all of this, and would fa-fill my lifes goal (which is how long this might take).

I want to be able to know the understandings of a very basic computer, to being able to create a OS (even one 1/100th the strength of DOS).

So here is the real question. Where do i start? Are there online E-books, text books, even tutorials? I can't spend my life in school so i need to do this on my own time (with any luck at a lost cost).

With any luck, in the end i will be able to build computer parts, program basic BIOS, and maybe in the end a OS that runs on those chips and my own computer.

And please no one say anything mean, i know this is a large task, and no one can ever know it all...but can't i try?

From what i know i will need to learn things in this step. (i don't know what the actual names would be called so if anyone can tell me that would be great)

1) Chip and Hardware design
2) Building small chips and circuits
3) Controlling the circuits
4) BIOS
5) OS Design

Thanks for ANYONE who helps me!
This is more for me and my personal interest than for a job, or anything like that.

[EDIT]

My problem is i have so many questions, and just did not know where to start, and start with what.

What my overall goal is to create a very simple circuit from scratch ( and understand how that circuit works down to the bits and bytes) and write my OS (possibly a BIOS?) to run on that circuit.

I love all the current answers and comments BTW.

I just wish i could find a single resource that has that process from start to finish. I can not be the first person to want to do this.

I see some of your comments and answers, using pre made kits, but i do not want that.
i want to understand how and why of the parts of that pre made kit.
Posted
Updated 25-Apr-11 11:06am
v2
Comments
Sergey Alexandrovich Kryukov 25-Apr-11 15:57pm    
Get my 5 for the question (it's becoming popular :-).
Please see my answer.
--SA
Ed Nutting 25-Apr-11 17:18pm    
I think what they are trying to say is that to gain the understanding you are looking for you should start with a premade kit that will give you a some intial knowledge and information. Similar to your first few years in school are like a premade kit and college/university is then the build it from scratch stuff that uses your basic knowledge to gain further understanding. Using a kit would give you correct and useful insight and point you in the right direction.
Sergey Alexandrovich Kryukov 25-Apr-11 18:39pm    
I don't think you can hope for a single resource.
My method is looking for MSDN and then CodeProject and Stackoverflow for complex technology overviews and walk true, Google for concrete stuff and tricky problems (and then Stackoverflow and CodeProject), Wikipedia and then Google for fundamental aspects, technologies, formats, etc.
--SA
OriginalGriff 26-Apr-11 2:23am    
I can understand what you are saying, about starting from scratch, but I think you are trying to run before you can walk.
Can you solder? Can you wirewrap? Have you used Veroboard? What software do you use to layout a PCB?
These are absolute minimum things you need to be able to do, and reasonably competently, before you can start making your own hardware from scratch, even from an existing circuit diagram.
I can solder, wirewrap, play with veroboard, but I draw the line at PCB layout: mostly because I used to check my H/W designers layouts against the circuit diagram and are very aware of how many potential problems there are. Once a circuit exceeds a certain complexity, you have no choice but to go with a PCB layout though - and that complexity level is surprisingly low if you want any reliability in the hardware.
"Start with a kit" isn't a cop out: it's a realistic way to learn. Would you start programming by learning to write Winforms apps in assembler? :laugh:

Phew! You get my 5 for the most ambitious, sensible question I have yet seen! :laugh:

That is a heck of a lot of work, and in a lot of disciplines. Some of those 5 areas are the subject of university courses all on their own...

My suggestion is: start small.

Look at getting a pre-built kit (you do not need your first hardware project to be made by someone who is yet to learn how to solder, trust me!) Arduino[^] is popular and a good start to understanding the basics of computers without having to start with transistors or PNP / NPN junctions - or even "what does a capacitor actually do?" which is a book all to itself...

If you start with a popular kit, there is a community out there (quite a few people here, too) who can help, support and explain, and who are used to beginners.

The important things to remember:
1) Don't try to do too much at one time: if you swamp yourself you will get discouraged and may abandon the whole idea.
2) If you don't understand, ask - but you worked that one out already :)
3) Have fun! Because there is always a heck of a "YES!" moment when your software first runs on your hardware!
 
Share this answer
 
Comments
thexcodec 25-Apr-11 15:43pm    
Thanks for your answer!
I realize this will take a very long time, and i may be doing this in my 80's haha

I love to learn things about computers, and it has gotten to the point were if i don't know basics of computers i won't know the advance (sort off :D).

I am willing to spend lots of time doing things slowly.
This is my hobby!

Proud to be a geek!
Sergey Alexandrovich Kryukov 25-Apr-11 16:00pm    
Good think about it: you don't have to wait until you're "ready". Learn and work at the same time!

Only remember: you should not ever come to the point when you stop learning. I think you do understand that...

Cheers,
--SA
Sergey Alexandrovich Kryukov 25-Apr-11 15:58pm    
Great points. They are so different from mine, but I really like them! My 5.
--SA
Tarakeshwar Reddy 25-Apr-11 16:12pm    
My 5
Ed Nutting 25-Apr-11 17:06pm    
My 5 very good answer. Had to give 5 for every answer to be honest. Good luck to the OP too! Personally I'm with SA's description of 'quick cheap solutions' but that's not to say I'm not ineterested and don't actually learn stuff ;P
I am not really sure you are serious. I even suspected this is a kind of trolling.

But if you are serious…

I really sympathize with you and respect your thirst for knowledge and understanding.

First of all, you should understand you're going to live a very difficult like, and not because of all those technical difficulties. Probably you will enjoy them. You can expect problem of a very different sort. In real life most "engineers" working in the industry have the attitude directly opposite to yours. They do all what it takes to learn as little as possible and are looking for some quick and cheep solutions and unearned easy money. Just take a look on other questions here at CodeProject to see what I'm talking about. If you reach the level of expertize you desire, all that people will hate you. They won't mind to use your expertize to their benefits though but will cell you short at any chance. They will be afraid of potential competition from your side and will do their best to let you down.

Not everything is that grim. You will certainly find some decent people in difference places. Nobody knows how many ears would it take to get you a chance to work with them.

Speaking of the fields of technology you're interesting in, you're asking too many questions, so hardly anyone would be able to help you right direction in all the fields in one quick answer. I can only give you the basic ideas. You should understand that if you go in for every technical detail, you will never get time for this. Therefore, you need to focus on fundamental (and theoretical) aspects of programming. At the same time, you need to practice all the time. The false illusion of knowledge can be too strong. Fortunately, there is pretty good way to check up your understanding: implement key solutions into working code. This is not 100% reliable though. The solution may work, but only for a while. You should go away from trial and error approach and use fundamental approach. For every line you write you should understand why. You should find analytical approach to every problem. This is all about fundamental aspects.

At the same time, there is a lot of junk knowledge: a lot of concrete software/firmware products by concrete manufacturers. You need to save time and learn them only when it is really required by some practical purpose. You need to work not toward erudition, but for really deep understanding. (Even though the job hunting is based on concrete junk knowledge, this is a bad illness of the industry; so you need to put yourself above this. You principle should be working for yourself first, then for your company; at the same time, you will need to be able to achieve ultimate commercial and other goals; this is no a very easy balance.)

As to the knowledge itself, these days this is much easier. You can use Google, Wikipedia and other sources. The real problem is selecting effective and solid sources of information. With time, you will find your ways to tell "cool" from "real" looking at many indirect symptoms. You should trust less and check up more, especially in the early stages of your self-development, before you develop better intuition.

For the bright note, I would like to give you only one reference, but the one I think every developer should know first. It is probably the most encouraging, too:

Peter Norvig, Teach Yourself Programming in Ten Years,
http://norvig.com/21-days.html[^].

Good luck,
—SA
 
Share this answer
 
v3
Comments
Tarakeshwar Reddy 25-Apr-11 16:12pm    
My 5
Sergey Alexandrovich Kryukov 25-Apr-11 16:19pm    
Thank you, Tarakeshwar.
--SA
Ed Nutting 25-Apr-11 17:06pm    
My 5 very good answer. Had to give 5 for every answer to be honest. Good luck to the OP too! Personally I'm with SA's description of 'quick cheap solutions' but that's not to say I'm not ineterested and don't actually learn stuff ;P
Sergey Alexandrovich Kryukov 25-Apr-11 17:12pm    
Thank you. (I already commented on your last statement in my other comment -- thank you.)
--SA
Monjurul Habib 25-Apr-11 18:22pm    
nice answer.my5
thexcodec wrote
I want to program my own OS, from scratch


Looks like you are on the right track ;). I started of with the same aim and as time passed I realised that I did not need a new OS (you could be different and end up writing one), but I did learn a lot of stuff which made me a good programmer.

Like OriginalGriff said, start small. SA is also right in saying, you are asking a lot of questions and have listed a lot of different fields.

Take a look at this book[^] by Tannenbaum, it should give you some knowledge about OS. It was a textbook for one of my papers in college and it was really good. His other book on modern operating system also has some good reviews.

You also have a ton of articles on CodeProject, one of the regular member is creating his own operating system and is also writing articles about it, take a look at them.
 
Share this answer
 
Comments
Sergey Alexandrovich Kryukov 25-Apr-11 16:24pm    
I appreciate both OP's goal to develop an OS as well as your answer, my 5.
I can tell this like a person who used to make my own very early multi-threading implementation from scratch (assembly and CPU) level, when multi-threading was not yet available in Linux, and structural exception handling (part of that solution) was not yet introduced in C++. Not easy stuff, but quite feasible provided there is enough background and perseverance...
--SA
Tarakeshwar Reddy 25-Apr-11 16:29pm    
Yeah it not easy, but I guess if you thing big, even if you do not near the goal you would have learned a lot in the process. I learned c# in the process and it has become my primary language.
Sergey Alexandrovich Kryukov 25-Apr-11 16:47pm    
You're absolutely right. A really deep knowledge comes only when you start doing difficult things with your own hands, right? By the way, after such experience one can really understand what is written by others. Not doing things with one's won hands often create false understanding...
--SA
Tarakeshwar Reddy 25-Apr-11 16:52pm    
Thats one reason I do not answer much at CodeProject. Most of the questions asked here can be self answered with a simple google search or just debugging the solution. Many want to take the fast route, but they dont realise that they are not gaining knowledge.
Sergey Alexandrovich Kryukov 25-Apr-11 16:55pm    
You're talking words of my answer, but this is not unique to CodeProject, unfortunately. Too many people are being attracted by "easy money" (as they probably think) to the industry. They have no idea of real work and acceptable quality. Their contribution to the company is often not even zero, but even very negative...
--SA
Those first few disciplines are more related to electrical engineering than software engineering. And most books are written to help people achieve a narrow, specific goal, not a large number of unrelated goals.

Your best bet is to ask a few Electrical Engineering professors for resources, with the expectation that most of what you learn will not help you get a job.
 
Share this answer
 
Comments
Albert Holguin 25-Apr-11 21:08pm    
as an electrical engineer... i disagree (about "will not help you get a job")... :)

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900