LinuxQuestions.org

LinuxQuestions.org (/questions/)
-   General (https://www.linuxquestions.org/questions/general-10/)
-   -   What are the most fundamental things to know about computers and Linux? (https://www.linuxquestions.org/questions/general-10/what-are-the-most-fundamental-things-to-know-about-computers-and-linux-743893/)

joeBuffer 07-30-2009 07:14 AM

What are the most fundamental things to know about computers and Linux?
 
If you want to learn things that have far-reaching importance in learning about computers and Linux, what would they be?
What I mean is, say you're very active in these forums - you're a moderator, you have thousands of posts, you've been using and learning about computers/Linux/UNIX/whatever for years, etc (maybe not all at once). What is constantly important to know?
If you have the ability to answer very many questions asked by very many people, and you don't have to look in a reference book to find the answer, what knowledge makes it possible for you to do so?
:study:
Also, I cannot comprehend how people can fully learn and master assembly. Do you find assembly to be a language that turns you into a know-it-all? If so, where does anyone in the world get a comprehensive Linux book or tutorial that teaches assembly using the GNU assembler and doesn't require you to also buy 50 other books? I can't understand how anyone could master this language using the GNU assembler (but this is a separate question).

pixellany 07-30-2009 07:58 AM

What is important to know (about anything):

First, you need to follow what interests you---subject of course to the realities of getting/staying employed. Two elaborations:
---Don't spend ALL of you time learning things that NOONE will pay you for.
---Don't spend a long time at a job that you have no interest in.

Another perspective: You need to know what is required to achieve a particular objective. It does no good to know how to hold a football if you don't know where the goalposts are....;)

Assembly is maybe easier:
First there was machine code. The processor designer gives you the code (in binary, octal, or hex), for a particular function. When someone figured out that they could assign names to all the functions, then we had assembly. Maybe not the easiest thing to learn, but it was better than remembering the numeric codes, and noone had invented Pascal or C, so there really was not much choice.
Quote:

Also, I cannot comprehend how people can fully learn and master assembly.
Because they need to to accomplish a specific task.
Quote:

Do you find assembly to be a language that turns you into a know-it-all?
I spent 4 years learning French and it just made me feel stupid.....

Also, keep in mind the difference between learning a language and learning to program. It does no good to know the language if you don't understand loops, branches, and data structures---and why you need them.

unSpawn 07-30-2009 08:09 AM

Very good questions. In essence LQ moderators are here to help people get along OK. Other than that moderators are "just" LQ members like you. And LQ members are as different on LQ as they are in R/L: some are generalists and some are specialists. Some like to tinker a lot and some don't (have the time or inclination to). What we all have in common is that we're all here to try and help each other. Others may find it easier to answer your questions more eloquently or practically but these are the mantras that come to mind right now:

Computing is easy.
Only humans use fuzzy logic and language to vaguely describe things in terms of "worries" or "thinking". Technology allows you to simplify any state to a condition being either true or false.

Knowledge is not only knowing things but knowing *where* to find it.
GNU/Linux comes with a load of information sources and the 'net is a true cornucopia of information. Knowing how to search and where to find information really is important. (This also means sharing information with others is crucial.)

Everything takes time and persistence.
Being able to fire a rifle accurately, perform open heart surgery or build a huge social networking site have in common their require skills that have to be learnt and practiced. And learning things takes time. Anger and frustration are not attributes of GNU/Linux. Anger leads to frustration, and frustration leads to, well, you know... ;-p

GNU/Linux equals freedom.
Some people forget that and just hold out their hand for an answer where they could easily try things themselves. You're free to experiment to find out if something is true or false.

GNU/Linux itself is not a goal.
It's "just" an "enabler": GNU/Linux system(s) enable you to perform jobs efficiently knowing what you produce conforms to official standards, enable you make money off of having a smoothly running, stable and secure platform, enable you to build something on top of it that may have a global impact. Be inspired to do something with it!

joeBuffer 07-30-2009 09:14 AM

Thanks for the responses. I might clear a couple of things up ...
By "I don't understand how they can master it" - I should say more accurately - I don't understand what resources they have for this. Say you are going to become an assembly expert. I have searched and used Google books, etc. I don't see that there is a source for learning everything about it. Are Intel's manuals complete? The books I've seen that seem thorough are all NASM or something else strange about them. An example:
these expert programmers that wrote the kernel.
All the assembly, etc. in it. As college people, with computer scientist degrees ... did they learn everything about hardware, and then use something like Intel's manuals? What did they do ... use reference material?
And as far as the question of ability to answer questions:
I've noticed here and in other forums, certain people that post and post and post and post and post. And they are all legitimate posts. When someone has a question about something, they post an answer. Period.
Does this come from years of experience, or from having a fundamental knowledge of things? How things work, I guess you could say, at a low level? Hardware, machine code/assembly, then one person asks a question about what to do about a buffer overflow, another has a #10 error, and another is complaining about an angry flippy-floppy. -:tisk:-
Is this years of experience, or is it foundational, fundamental, whatever word I can't think of? In every forum and every question, they have an answer. Do they just (out of the kindness of their hearts) look in a reference book (of which they have many). I am confused as to how this happens.

joeBuffer 07-30-2009 09:43 AM

I don't know that I could get a job in programming or computer science or anything like that ...
I don't know my I.Q. but I think it's average.
I took two free online i.q. tests and one said 120 and one said 140. I'm sure this is wrong.
I don't know a lot of math.
I'm assuming that if you get paid 70-100 thousand dollars a year to do something, you're very smart and have to be very good at what you do.
I graduated high school, but I took the equivalency test, and didn't actually attend high school.
I was going to attend college for software development a while back, but the math and logic and everything was over my head (that is to say I'd never learned anything about it, really).
I haven't learned a large amount since then about math or logic or anything.
I have been planning on learning about computers for my personal use, but I would like to be very knowledgeable about them.
I have some books, I've read for quite a while using internet resources.
I have C in a Nutshell, and How Computers Work - White/Downs, which I purchased before using Linux (but which still has good information in it). I've learned (before and since using Linux) some assembly, C, C++, PERL, bash shell scripting, sed and awk (mostly awk), some of the Linux utilities, a lot (in my opinion) about filesystems and the filesystem hierarchy, partitioning, etc. (I can't really grasp proc and things like that yet.) Everything so far for me is easily understandable, but is a black box.
What I know of processors, memory, hard disk, ram, etc. for some reason when I read about somewhat advanced topics on the software/operating system level, I cannot picture how they are performing what I'm reading about. It's very mysterious to me in a lot of ways. A lot of this (I believe) comes from interrupts, and things like this. I don't know or understand some things yet. I wonder if I'm wasting my time by expecting to get a huge amount of knowledge about everything - or maybe wasting my time on what I have been learning about, by comparison to how much I could learn at once by reading about something else (things that cover a lot, very important topics).

joeBuffer 07-30-2009 09:49 AM

Also, I can't decide whether the internet is an excellent source of information or not. I don't know what to go by, what is very reliable, very accurate, etc. so I don't read a lot of articles/how-to's and things like this, because I'm not sure about the quality and how worthwhile they are.
I've installed and experimented with Gentoo, K-X-Ubuntu, openSUSE, Slackware, Fedora, BLAG, a lot of Linux From Scratch ... I don't know what to do. I've only been using Linux, since early this year.

tredegar 07-30-2009 01:50 PM

Quote:

I don't know what to go by, what is very reliable, very accurate, etc. so I don't read a lot of articles/how-to's and things like this, because I'm not sure about the quality and how worthwhile they are.
As in real life: Read, attempt to understand, test your perception against the reality.

Then reconsider, test your perception .....

Lather, rinse, repeat.

NeddySeagoon 07-30-2009 02:48 PM

joeBuffer,

Knowing how to solve problems is half the way to becoming in expert in any field.
There are two approaches to problem solving and you need to use them both.
1. Cut things out and see if the problem persistes
2. Try different things and note the effects - deduce the common cause.

You only get to know assembler if you have a problem to solve that needs assembler.
Intels manuals will tell you the Op Codes for various instructions but not the assembly numonics.

I learned problem solving before I met Linux and have always enjoyed it, which is why I post here and at forums.gentoo.org. Thats possibly why Gentoo is my distro of choice too.

You need not worry about your IQ for being good at problem solving. You need only be methodical.

lazlow 07-30-2009 03:04 PM

If you do not have the math and logic to back it up, programming is going to be very difficult. You have to build the foundation before you build the house.

Probably the biggest thing I have to remember is that things are constantly changing. What is true in computing today (limits, methods, etc) will not necessarily be true tomorrow.

The main reason the assembly is still taught at most universities is to demonstrate how far we have come. Assembly has become pretty obscure and probably 90%(?) of the programmers out there have not programmed in it for years. If I remember correctly less than %5 of the Linux kernel is in assembly. That is not to say that assembly is bad. Properly programmed assembly will still execute faster(per task) than any other language. However it will also take MUCH longer to write and can be extremely difficult to debug. C has pretty much become the standard for programming. Its execution speed gets closer to assembly every generation, it is much faster to write, and it is far easier to debug.

chrism01 07-31-2009 01:20 AM

As far as knowing stuff, goes, you have to understand that the total amt of stuff you could learn about computers (HW & SW) is effectively infinite.
So, what you start by doing is specialising in the stuff you need to know to do whatever it is you need to do.
A logical mind/approach helps a lot because, contrary to occasional appearances, computers are logical (at the fundamental level).
See previous comment re fuzzy logic.
Building a web page requires a greater appreciation of visual aesthetics than cli or DB programming.
However, good code, like good mathematics, will usually have a visual aesthetic, ask any mathematician or theoretical physicist or programmer.
You don't need to understand ASM unless you intend to use it, although a basic understanding gives you a good background in the way things really are.
Personally, I'd also recommend a good basic understanding of C (at least).
Most OS, DB internal code is some form of C.
Also, a lot (most?) other higher level langs are written in C underneath eg bash, Perl, PHP etc.

HTH


PS:
To learn/know a lot:

10 read
20 do
30 goto 10

:)

joeBuffer 07-31-2009 04:03 AM

I have a good understanding of C in my opinion, I can read and understand it easily (except for standard library functions, etc.) which is why I bought C in a Nutshell instead of an introductory book ...
I first bought a C++ book and read it and learned some about C++ years ago, but I went a long time without learning about much else as far as programming goes.
I've been spending a lot of time on the computer since I started using Linux, all day basically. I just yesterday read Oracle's tutorials for sed and awk, I'd read IBM's tutorials on them, but they weren't so complete or explained so well, in my opinion, as Oracle's were. I need a refresher on PERL, really, but I remember a lot of it. Bash scripting I haven't read a very complete tutorial on yet, but I can get things done with it. :)
Linux is much more interesting to me than Windows, I think Windows is boring and I enjoy learning about Linux/UNIX much more than Windows, and it isn't just because I'm bored with Windows - I really care about knowing about Linux, where with Windows what I do know about it is just to know about it basically.
I've already read about 40 pages of C in a Nutshell, but I've been reading it slowly. I was going to read through it front to back and then study it more. C is also very interesting to me, where with C++, when I've read about it, I've sort of forced myself to.
I've been thinking that with assembly it would probably be good to learn a lot about hardware, and read a beginner-intermediate type book on it, and then use Intel's manuals, or something along those lines.

joeBuffer 07-31-2009 04:10 AM

When I was very new to computers, and hadn't learned anything about them really, I assumed that to get a job like programming or practically anything else with computers you wouldn't need a very large amount of mathematics, logic, etc.

jdkaye 07-31-2009 04:38 AM

Quote:

Originally Posted by lazlow (Post 3625913)
If you do not have the math and logic to back it up, programming is going to be very difficult. You have to build the foundation before you build the house.

Hi Joe and Lazlow,
I think that really depends on what sort of programming you're doing. If you are working out routines for a vector graphics program or fast fourier analysis, then yeah, you certainly need the math to back it up. But these requirements are specific to those kinds of tasks.

More generally, I'd say you need the ability to think algorithmically; that is to break down a problem into a series of steps and execute those steps in a logical order. This may or may not involve maths depending on what you're trying to do.

Likewise, computer programming languages come in different flavours: there are low level languages like Assembly and C which deal with things like memory allocation and pointers and addresses. I have the same reaction to these low level programming languages as I do to a televised kidney operation where you see in living colour and horrible detail, all the blood and guts and internal organs. I'm glad somebody does it but my reaction is, Yuck. I prefer the cleaner world of high level programming languages like (Un)icon, Prolog, Lisp, Perl, Snobol, etc. where the gore and guts are left to other devices to deal with.

My programming deals mainly with pattern matching of various kinds so I can remain blissfully ignorant of the gory bits. :) If you like C, Joe, I say more power to you. But you can love programming without even knowing C.

Above all, have fun.
cheers,
jdk

joeBuffer 07-31-2009 04:44 AM

I think reading about different languages and experimenting with them has been very helpful to me, personally. I just like a lot of things about C, a lot of it is just personal preference, though. I wouldn't go into the details of the design of the language or anything like that, as compared to others, but it's very quality to me, and being a little lower level isn't a bad thing at all to me. I've never tried out lisp or scheme or any functional languages, but I've been curious ...
Quote:

(Un)icon, Prolog, Lisp, Perl, Snobol, etc.
I haven't learned anything about one of these languages except Perl.:cool:

jdkaye 07-31-2009 04:56 AM

Quote:

Originally Posted by joeBuffer (Post 3626456)
I think reading about different languages and experimenting with them has been very helpful to me, personally. I just like a lot of things about C, a lot of it is just personal preference, though. I wouldn't go into the details of the design of the language or anything like that, as compared to others, but it's very quality to me, and being a little lower level isn't a bad thing at all to me. I've never tried out lisp or scheme or any functional languages, but I've been curious ...

I haven't learned anything about one of these languages except Perl.:cool:

Check them out if you have the time. They're fun. Snobol's a bit 1960's though.
cheers,
jdk

salasi 07-31-2009 05:35 AM

Quote:

Originally Posted by joeBuffer (Post 3625370)
Also, I cannot comprehend how people can fully learn and master assembly.

there is some of the subject of programming (I'm actually going to cheat a bit here and assume that its actually progamming and computer architecture and systems analysis that is at issue here, because you don't just want to write the assembler instructions that fullfil the requirements for a tightly-specified spec for a subroutine) that is language independant and some that are language dependant.

The bigger part is normally language-independant, and you are not directly asking about that/those. If you regard the language-dependant part as a 'plug-in', then, for someone who already has a robust toolbox for approaching computer programming issues, it shouldn't be a massive leap to be able to cope with a new 'plug-in'.

That said, there is no guarantee that you will like any new programming language that you can come across. Some you will probably hate, while still being able to write programs in them.

Quote:

Do you find assembly to be a language that turns you into a know-it-all?
I can't even see how it could. Well, unless you were staggeringly small-minded.

Quote:

If so, where does anyone in the world get a comprehensive Linux book or tutorial that teaches assembly using the GNU assembler and doesn't require you to also buy 50 other books? I can't understand how anyone could master this language using the GNU assembler (but this is a separate question).
I am not sure why you are concentrating on assembler.

Quote:

I'm assuming that if you get paid 70-100 thousand dollars a year to do something, you're very smart and have to be very good at what you do.
This is very far from necessarily true. One of the best (my qualitative judgement) programmers that I ever knew, and I have known a few, wasn't the smartest guy, but he was the best organised. He had a method that worked for him and applied it relentlessly to any problem that he came across. He turned out good quality code and he turned it out on time and well commented (well, unless management really made strong efforts to stop him, which happened at times).

Of course, you could also say that this 'having a method' thing was smartness, but it wouldn't get you many points in an IQ test.

That said, I can't see you getting very far if you don't understand logic.

Quote:

By "I don't understand how they can master it" - I should say more accurately - I don't understand what resources they have for this. Say you are going to become an assembly expert. I have searched and used Google books, etc. I don't see that there is a source for learning everything about it. Are Intel's manuals complete? The books I've seen that seem thorough are all NASM or something else strange about them. An example:
these expert programmers that wrote the kernel.
All the assembly, etc. in it. As college people, with computer scientist degrees ... did they learn everything about hardware, and then use something like Intel's manuals? What did they do ... use reference material?
There is no resource which is going to be 'just add water, and become an expert'.

These people who write the kernel mostly don't write assembler (in fact, assembler is regarded as a last resort, only to be used when other, more easily portable, solutions are for some reason, impossible, or not advantageous) and they are really the expert's experts.

Everyone starts with 'hello world' programs and builds up, adding new techniques and tricks in small amounts and gradually get there. Malcolm Gladwell, in one of his books, came up with the number of 10,000 hours being what a head-of-the-field in any field needs to put in. Of course, to really get to the pinnacle, and not just a moderate level of competence you need to be putting in that 10,000 hours on top of talent and not all of us would even aspire to being the Beethoven of code (whatever that means), but just reading a 'How to do Assembler in a Week' book isn't going to get you all the way there, all on its own.

Quote:

Also, I can't decide whether the internet is an excellent source of information or not.
Yes and no. there is a mass of useful information on the 'net, but there is also an even bigger mass of rubbish. But for tutorials and the like, if you are finding that the tutorial is taking an approach that seems helpful to you, then that's probably good. Just be aware of the risk that it is making things seem easy because it is oversimplifying...

Quote:

What I know of processors, memory, hard disk, ram, etc. for some reason when I read about somewhat advanced topics on the software/operating system level, I cannot picture how they are performing what I'm reading about. It's very mysterious to me in a lot of ways. A lot of this (I believe) comes from interrupts, and things like this.
These are more architecture issues and a book on that would be good to read. look for example at http://www.amazon.co.uk/s/ref=nb_ss_...ecture&x=0&y=0 (I like the patterson ones, but YMMV...by the way that was the Amazon.co.uk page, you probably want the .com).

If you are thinking in terms of a career (or, maybe, a job), for most entry-level posts, you wouldn't need a massive amount of math to do the job - maybe some knowledge of a specialist field, but the person interviewing may feel that a candidate with greater intelligence will learn faster. This is a questionable assumption, but I don't know of any job interviews that test ability to learn, but rather they tend to check out something else and assume that this implies ability to learn.

joeBuffer 07-31-2009 07:30 AM

Well, I was reading IBM's page on the Linux boot process, and looking at some of the assembly in the linux source ... some said copyright Linus Torvalds, rewritten by someone else, etc. ... I've read things saying that a lot of good programmers aren't the best programmers, because the best programmers know assembly. I've read other things, too, but you get the idea.
Mainly why I focus on assembly so much is because I'm trying to think of the fundamentals.
Right now, in my mind, the fundamentals would be hardware/architecture, and machine code or assembly.

joeBuffer 07-31-2009 07:44 AM

I have quite a few books here that I haven't read, yet.

pixellany 07-31-2009 08:24 AM

Moved: This thread is more suitable in <General> and has been moved accordingly to help your thread/question get the exposure it deserves.

Not really a Linux issue

joeBuffer 07-31-2009 09:12 AM

I believe learning assembly is as you've said, it shows you the guts. It's how it's really working.

geek745 07-31-2009 11:30 PM

joeBuffer,

As others have said, learn things that may be profitable, see the value in community and sharing knowledge, and find your niche. I'm no senior member or moderator here, but I subscribe to a few of the forum updates and skim through them for stuff that matches my experience, expertise, or interests, and read those - sometimes I learn about something interesting; other times I get to share my knowledge. I am just finishing my undergraduate degree in computer science, straight out of high school, and enjoying the studies, but my Linux experience has been almost exclusively outside of the classroom, with the exception of one operating systems class that actually exposed me to the more inner workings of resource allocation, processor scheduling, and multi-threading; a few programming classes were done in a Linux environment also, but they could have been done in Windows, too.

I would say first to explore, as you seem to have been doing, to find some area that you are interested in; then find some software projects that fit that area and subscribe to their mailing lists and forums and stuff to stay informed, and use them regularly - you will find that in the process of exploring certain solutions on Linux, they will begin to expose you to other essential topics, or require that you learn about other topics. For example, building a project from source will require that you have a good and recent set of build tools (compiler, linker, etc), learn source code management tools to obtain the code and possibly contribute to it down the line, upgrade your kernel by hand, turn your box into a router for your home network, etc.

The value of problem-solving skills cannot be stressed more - it is essential, whether programming, debugging, testing software, or working in IT support positions where rather than modify tools you simply configure and deploy them to perform a regular task, or working in QA and documentation, there are plenty of ways to get involved in Linux and become knowledgeable in an area that interests you. In all of this, however, it will remain necessary to be able to think critically about a discrete logic system, often times with common sense, but with a structured familiarity with the subject at hand.

Welcome to the party!

chrism01 08-07-2009 12:33 AM

What makes IT an interesting career (and/or hobby) is that it's an ongoing process, you never stop learning.
If you just want to coast along, it is the wrong industry for you.
So, don't worry about trying to know it all, it's a futile exercise.
Starting with HW and assembler is fine, if that's what works for you.
Read up on Logic (especially Boolean).
There's plenty of free info on the net, just check and compare to make sure you get the good stuff.
In this sort of area (ie technical) Wikipedia is pretty reliable, but do follow some of the references as well.

Last but not least, have fun!
:)

jiml8 08-08-2009 12:53 PM

Quote:

Originally Posted by lazlow (Post 3625913)
If you do not have the math and logic to back it up, programming is going to be very difficult. You have to build the foundation before you build the house.

Probably the biggest thing I have to remember is that things are constantly changing. What is true in computing today (limits, methods, etc) will not necessarily be true tomorrow.

The main reason the assembly is still taught at most universities is to demonstrate how far we have come. Assembly has become pretty obscure and probably 90%(?) of the programmers out there have not programmed in it for years. If I remember correctly less than %5 of the Linux kernel is in assembly. That is not to say that assembly is bad. Properly programmed assembly will still execute faster(per task) than any other language. However it will also take MUCH longer to write and can be extremely difficult to debug. C has pretty much become the standard for programming. Its execution speed gets closer to assembly every generation, it is much faster to write, and it is far easier to debug.

I occasionally still have to use assembly when working on embedded systems, particularly with digital signal processors. Other than that, I haven't programmed in assembly in 20 years.

joeBuffer 08-08-2009 02:38 PM

What programming language(s) do you use, jiml8?

Erik_FL 08-08-2009 10:10 PM

It's very hard for me to decide what is fundamental since I've learned about computers gradually since the first 8080 chips were introduced.

The most frequent problems that people seem to have are these.
  • What to do when the OS does not boot
  • How to install an additional OS
  • Understanding the need to back up files and how to do it
  • Knowing what is needed to recover from problems

Computer manufacturers are a big part of the problem because of what they don't provide in the way of information and software. A lot of the time even the standard repair tools on a "retail" OS CD are not included. I've only seen one company (HP) even clearly warn me in the computer materials that I should create the restore discs. Many people never create them and don't know that they need them until they have a problem many years later.

The most fundamental concepts for a computer owner are these.
  • Disk partitions
  • The boot process in general
  • Backing up data
  • How to troubleshoot problems
  • Where to find information about hardware and software

Computer professionals or software engineers need to know much more information. I'm not sure where to begin with that.

joeBuffer 08-09-2009 12:06 AM

Quote:

I've only seen one company (HP) even clearly warn me in the computer materials that I should create the restore discs.
I'm using a Hewlett Packard computer. When I bought it, it came with Windows XP. It also came with a recovery partition. When the computer boots up, when you can press F1 to configure BIOS and Esc to choose what to boot from (CD-ROM, hard disk, etc.), there's an F10 option for system recovery. It reinstalls Windows XP and recovers everything to factory-shipped condition, and even with this being true it bugs you when you start up to make backup CD's with the software it provides, and when it does pop up you can choose to be reminded later or choose to not be reminded again. When you use the recovery partition, it happens again.

joeBuffer 08-09-2009 12:11 AM

I'm reading the book "Programming from the Ground Up" right now, and downloaded "The Art of Assembly" thinking it might be good to read. I don't want to learn HLA, though. I glanced through the book, and it seems complete. I read some of it years ago, but never finished it or got very far into, even.
I still have C in a Nutshell to go through, too. I'm wondering if reading C in a Nutshell is as good an idea as reading other C material and using it as just a reference - but I want to read every bit of it anyways, because it's very full of information and a lot of detail.
Assembly is interesting to me, aside from the fact that it's low level. I know the basics of assembly, already. I really want a very good book that ranges from beginner to intermediate assembly (possibly some advanced topics, too) that uses the GNU assembler and Linux for all examples and details.

Erik_FL 08-09-2009 12:38 PM

Quote:

Originally Posted by joeBuffer (Post 3636307)
I'm reading the book "Programming from the Ground Up" right now, and downloaded "The Art of Assembly" thinking it might be good to read. I don't want to learn HLA, though. I glanced through the book, and it seems complete. I read some of it years ago, but never finished it or got very far into, even.
I still have C in a Nutshell to go through, too. I'm wondering if reading C in a Nutshell is as good an idea as reading other C material and using it as just a reference - but I want to read every bit of it anyways, because it's very full of information and a lot of detail.
Assembly is interesting to me, aside from the fact that it's low level. I know the basics of assembly, already. I really want a very good book that ranges from beginner to intermediate assembly (possibly some advanced topics, too) that uses the GNU assembler and Linux for all examples and details.

I don't think it matters much where you start, as long as you keep going. I learned assembly language long before C because I started out doing 8080 programming. My next project was writing some software in PDP-11 assembly language. Then I wrote Motorola 68000 assembly language and finally learned C. The Kernighan and Ritchie book is a good introduction and tutorial for C and I recommend it even if you want to learn C++ afterward.

You don't need to learn assembly language but it does force you to learn some important concepts that apply to high level languages but are more hidden. One can write good or bad programs in any language.

If you're considering Windows programming then I recommend reading "Programming Windows Fifth Edition" by Charles Petzold. It's one of the few books that covers the Windows API from the ground up. Many others just focus on the latest (and soon to be gone) Microsoft "technology" being pushed onto developers. Everything Microsoft does is built on top of the foundation described by Petzold's book. That book has often allowed me to do things that would have been difficult without its insights.

I can't recommend any good C++ books. I sort of learned C++ by the seat of my pants. I'm by no means an expert C++ programming but I'm slowly improving. I've also discovered that many people using C++ don't understand it well or the advantages and pitfalls of object-oriented program design. Doing anything with Microsoft COM (Component Object Model) will quickly remove the starts from one's eyes about solving every problem using objects. From what little I've seen of Cocoa it appears to be closer to "object heaven" but has its own set of problems.

Read as much code as you can written by other people and try to understand it, what is good about it and what is bad about it. Take ideas that work and refine them and be willing to use different ideas when you write something new. I learned much more from other programmers and their programs than I ever learned from books. And don't accept everything a book says as fact. Some of them have incorrect information, programs that don't work, or are poorly designed. McGraw Hill always had the worst books that way. Read a few books about a language and question what you read if it's inconsistent between authors.

I always laugh when people argue about what is "programming". I don't care if you're writing batch files, FORTH, C++ or assembly language for a micro-controller "stamp". If you are telling the computer what to do or how to do something, make decisions, or perform calculations then you are programming. It seems more productive to focus on helping each other become better programmers than worrying about who belongs in the club. If you identify yourself as a programmer then you're a programmer and there is always more to learn and something you can teach.

gangettan 08-09-2009 03:43 PM

Quote:

Originally Posted by joeBuffer (Post 3625370)
Also, I cannot comprehend how people can fully learn and master assembly.


Practise maketh perfect my friend ...
:)

linux

joeBuffer 08-09-2009 09:18 PM

gangettan
I've looked around and found no extremely complete reference books or anything of that sort for GNU assembler and Linux. If someone is a master, what reference material would they be using?

Dogs 08-10-2009 09:16 AM

Yes sir, there is much that recurs.

It's all very similar to one's own mind. To know English is to know law, medicine, business, warfare, electronics, marketing, psychology, machining, welding, automechanics, aviation, space travel, C, Linux, and most importantly...

PEOPLE!

People made all of these things in their own image. Instead of saying, "I want to do these things," they were simply done. Usually without much of a clue as to how anything actually worked.

Get a firm grasp on that one, and you'll realize "needing a job" isn't necessarily the right answer...
You need work, and to work, you must go and do.

You already have all of the tools necessary to do anything you can come up with. If you can't come up with anything, it's because you're not trying.

jiml8 08-21-2009 01:19 PM

Quote:

Originally Posted by joeBuffer (Post 3636030)
What programming language(s) do you use, jiml8?

Depends on what I am doing. In my current project, I am using C and C++, with a bit of assembler as required. In the last project I did that was along the same lines, it was C, assembler, PHP, and C#.

Websites? PHP or Perl (I prefer PHP). Scientific programming? C, C++, or Fortran.

Other languages as required for specific projects.

rob.rice 08-28-2009 07:42 PM

what you get from learning assembly is a deep understanding of how computers and the logic there built from work
programming (of any kind) forces you to think in steps so dose math
it's not so much what you know it's what you understand
if you understand how things work it helps in remembering the details
it also helps you add to the details you already know
if you don't have an over all understanding you have information not knowledge
with computers like any thing else you only work on one small part at a time

schneidz 09-01-2009 09:21 AM

i took an operating systems course in college that was my epiphany on 'how computers work'.

mit has a course on academicearth on operating systems. that mite help you with your understanding.

Erik_FL 09-01-2009 10:17 AM

Quote:

Originally Posted by schneidz (Post 3665435)
i took an operating systems course in college that was my epiphany on 'how computers work'.

mit has a course on academicearth on operating systems. that mite help you with your understanding.

I agree. I greatly increased my understanding of computers and software in general when I began studying operating systems. In my case it was DEC RSX-11M and VAX/VMS that I studied in order to write and maintain drivers.

SlowCoder 09-11-2009 06:57 PM

Fundamental? Well, how's that electricity? Last I heard you need electricity to do jack squat with your PC.

docesam 09-16-2009 08:14 PM

basically all what you need is to memorize all the info in the following sites :

http://www.pcguide.com/
http://www.tomshardware.com/
http://msdn.microsoft.com/
http://www.linuxquestions.org/

then it is all done !

linuxraja 09-16-2009 08:58 PM

Most basic thing you need to know abt Computers - You need to turn the power on before you can use it!

Most basic thing you need to know abt Linux - It is a software!


:D


All times are GMT -5. The time now is 08:29 AM.