12 Replies - 1516 Views - Last Post: 27 December 2011 - 05:06 AM

#1 RuneChart  Icon User is offline

  • New D.I.C Head

Reputation: 2
  • View blog
  • Posts: 31
  • Joined: 13-July 11

How can I learn this stuff?

Posted 26 December 2011 - 07:32 AM

I've been studying programming in my free time for several years. I feel I have a thorough understanding of syntax and logic in several different languages. If I have the right input, I can almost always create the right output. So, I thought my studies going pretty well. Lately though, somethings been gnawing at me:

I don't really know how to make my programs do things.

I get by fine with interpreted languages like AS3 or Java, that come with a built in API for most things you'd want to do, but I never got past the "Hello World" console stage in languages like C++.

I'm completely clueless about so many aspects of what a computer does. I know nothing about working with hardware or operating systems. It's extremely frustrating that I often don't even have to vocabulary to express my questions. I don't know how to show graphics, play sound, act as a webserver, collect mouse input, or any of that stuff.

If I search for things like these, and I'm lucky, I'll get some libraries that supposedly do these tasks, which is another thing I don't understand how to do. However, there are no beginner's introductions to these things that I can see. I don't really know what I expect as an answer to this post, mostly I needed to get it off my chest after many nights of fruitless searching. I guess I'm asking if anyone can recommend some good books or tutorials on hardware, operating systems, or whatever I'm getting at here?

I would really appreciate it if someone could help get me out of this rut.

Is This A Good Question/Topic? 0
  • +

Replies To: How can I learn this stuff?

#2 111027  Icon User is offline

  • D.I.C Head

Reputation: 17
  • View blog
  • Posts: 141
  • Joined: 26-December 11

Re: How can I learn this stuff?

Posted 26 December 2011 - 07:44 AM

I believe you've taken the wrong route at the beginning. You've tried to learn how to program, but do not really understand how a computer works. Some might say it's not really needed, but i believe it's essential.

I cannot give you a list of books to read, but i'd advise you to look up something on microprocessors. Then, i'd look up basics of operating systems, such as file systems and memory allocation. Afterwards, i'd advise you to start programming again, from scratch. Learn C, and learn to do things yourself. No big libraries, no 'insert the following code'. Pure logic and reasoning.

Those are the very, very basics, and those are what i teach my own students. Afterwards, you could use educating yourself on Algorithm theory and Data structures - searching, sorting and shortest path problems are the essentials on the first, and lists, stacks, queues, deques, graphs, hash tables and dictionaries on the latter.



It might seem like a lot of learning to do, and it is. But you need to understand that programming is a science, not a craft. And a science for engineers. So think whether you're really interested into this, and if you are, you know where to start. It will take you a lot of time, but eventually, you can do it - if you put enough effort into it.



(I didn't tell you to learn EVERYTHING, though. If i did, i'd tell you to learn basic Calculus and discrete mathematics, as it's the difference between a programmer and a good programmer)
Was This Post Helpful? 1
  • +
  • -

#3 RuneChart  Icon User is offline

  • New D.I.C Head

Reputation: 2
  • View blog
  • Posts: 31
  • Joined: 13-July 11

Re: How can I learn this stuff?

Posted 26 December 2011 - 08:33 AM

Thank you, that was a more helpful response than I expected from that post. You've given me a lot to think about.
Was This Post Helpful? 0
  • +
  • -

#4 111027  Icon User is offline

  • D.I.C Head

Reputation: 17
  • View blog
  • Posts: 141
  • Joined: 26-December 11

Re: How can I learn this stuff?

Posted 26 December 2011 - 08:36 AM

My pleasure. If you have any question at all, feel free to PM me, and i will do my best to help you.
Was This Post Helpful? 0
  • +
  • -

#5 tlhIn`toq  Icon User is offline

  • Xamarin Cert. Dev.
  • member icon

Reputation: 6528
  • View blog
  • Posts: 14,435
  • Joined: 02-June 10

Re: How can I learn this stuff?

Posted 26 December 2011 - 09:22 AM

We can help you by saying "First learn basic programming and the language of C#. Then take on assignments." Could someone here write this program for you? Sure. Could someone here map out all the processes you need to follow and do the Software Design part of this in the slim hope you could code it from there? Sure. But we don't volunteer to do the job that you're either getting paid for, or getting a grade for. You may want to read this.

For now, just work on the lessons. Do a self-teaching book from cover to cover. Then consider writing a program.

Don't try to create a useful working program to fit a need of yours (or a for-pay contract) as your introduction to coding project. When you are learning to code you don't know enough to code a program, let alone know how to engineer the architecture of a program. It would be like saying "I don't know how to read sheet music, or play an instrument. I think I'll write a 3 act opera as my first learning experience."

I don't say this to be mean. We've seen lots of new coders take this approach and we know it doesn't work. Trying to design your own programs before you understand the basics of the code language you've chosen just leads to problems, frustrations, and 'swiss-cheese' education (lots of holes).


Resources, references and suggestions for new programmers. - Updated Nov 2011
Spoiler

Was This Post Helpful? 0
  • +
  • -

#6 111027  Icon User is offline

  • D.I.C Head

Reputation: 17
  • View blog
  • Posts: 141
  • Joined: 26-December 11

Re: How can I learn this stuff?

Posted 26 December 2011 - 09:25 AM

Which is why i recommended C + structured programming + data structures + algorithms
Was This Post Helpful? 0
  • +
  • -

#7 RuneChart  Icon User is offline

  • New D.I.C Head

Reputation: 2
  • View blog
  • Posts: 31
  • Joined: 13-July 11

Re: How can I learn this stuff?

Posted 26 December 2011 - 09:36 AM

tlhIn`toq - Thanks, but I think you misunderstand my problem. Coding is not what I have a problem with. I'm reasonably satisfied with my ability in syntax and logic. What I haven't been able to learn is how to interface with operating systems or hardware, in order to go beyond simple console stuff. I have seen very few coding resources that even touch on this stuff, at least for compiled languages. I can make and have made more sophisticated applications in interpreted languages.
Was This Post Helpful? 0
  • +
  • -

#8 111027  Icon User is offline

  • D.I.C Head

Reputation: 17
  • View blog
  • Posts: 141
  • Joined: 26-December 11

Re: How can I learn this stuff?

Posted 26 December 2011 - 10:29 AM

I've given you your answer. You won't get a better one, to be direct. A programmer isn't a person with knowledge of a number of programming language, but with the knowledge to utilize them. You do not have that knowledge - therefore, acquire it. I've told you where to start, it's your call whether you will or not.
Was This Post Helpful? 0
  • +
  • -

#9 tlhIn`toq  Icon User is offline

  • Xamarin Cert. Dev.
  • member icon

Reputation: 6528
  • View blog
  • Posts: 14,435
  • Joined: 02-June 10

Re: How can I learn this stuff?

Posted 26 December 2011 - 10:30 AM

Quote

What I haven't been able to learn is how to interface with operating systems or hardware, in order to go beyond simple console stuff.


That's rather general. 'or hardware'... like what? Scanners, Cameras, RFID readers, industrial robots?
As a rule each manufacturer provides an SDK (Software Developer's Kit) for their device. If you want to communicatte with a given RFID reader, you use their API and SDK that describes how to talk to their hardware. A reader from manufacturer A is not going to work the same way as from manufacturer B, so you have to deal with each one individualy. Its the same with most hardware: A Canon camera is different than a Nikon. An HP widget is different than a Dell widget.


As for "interface with the operating system"... What do you mean by that? Read files from the hard drive? Detect input from the serial port? Again, what you're mentioning is so vague its hard to steer you in the right direction.

Quote

I get by fine with interpreted languages like AS3 or Java, that come with a built in API for most things you'd want to do, but I never got past the "Hello World" console stage in languages like C++.


If you don't have a solid reason for C++ yet (like your job demands it) then maybe you should take a crack at C#. It already has a framework for GUI interaction.
Was This Post Helpful? 1
  • +
  • -

#10 wordswords  Icon User is offline

  • D.I.C Regular
  • member icon

Reputation: 76
  • View blog
  • Posts: 272
  • Joined: 17-December 11

Re: How can I learn this stuff?

Posted 26 December 2011 - 10:30 AM

I learned all the basics of operating systems, networks, and hardware from my Computer Science degree. You may consider studying a CS degree in your spare time, maybe informally from the free lectures online (see: http://academicearth.org/) or formally on a night class or distance learning programme.
Was This Post Helpful? 2
  • +
  • -

#11 111027  Icon User is offline

  • D.I.C Head

Reputation: 17
  • View blog
  • Posts: 141
  • Joined: 26-December 11

Re: How can I learn this stuff?

Posted 26 December 2011 - 10:38 AM

A CS education is practically invaluable. I've learned what i know on my own, but god knows i wouldn't have had to reinvent so many wheels if i had learned it in school. It's my first semester at university and i'm practically astonished by how good formal education can be.
Was This Post Helpful? 0
  • +
  • -

#12 RuneChart  Icon User is offline

  • New D.I.C Head

Reputation: 2
  • View blog
  • Posts: 31
  • Joined: 13-July 11

Re: How can I learn this stuff?

Posted 27 December 2011 - 04:07 AM

View Post111027, on 26 December 2011 - 10:29 AM, said:

I've given you your answer. You won't get a better one, to be direct. A programmer isn't a person with knowledge of a number of programming language, but with the knowledge to utilize them. You do not have that knowledge - therefore, acquire it. I've told you where to start, it's your call whether you will or not.

I can't control whether other people comment on this thread. If you want to try to convince them that your answer was perfect and their input is unnecessary, be my guest. There's no reason to complain to me, however.

tlhIn`toq - I gave a few specific examples in my first post, but I wasn't really looking for an answer to a specific problem so much as venting frustration. In fact, I would have deleted my first post soon after if these boards provided the option. Of course, that doesn't mean I don't appreciate any advice.

There's no particular reason I use C++, other than it being the first language I was taught. I'll check out C#, but eventually I'd like to understand how to do things without a framework. Does the C# framework work for multiple platforms?

wordswords - Thanks, I'll check out that site.

Not to discount the value of formal education, but I've met people who were pretty close to graduating that lacked some basic knowledge. I suspect that you get what you put into it, like anything.

This post has been edited by RuneChart: 27 December 2011 - 04:16 AM

Was This Post Helpful? 0
  • +
  • -

#13 baavgai  Icon User is offline

  • Dreaming Coder
  • member icon


Reputation: 7150
  • View blog
  • Posts: 14,892
  • Joined: 16-October 07

Re: How can I learn this stuff?

Posted 27 December 2011 - 05:06 AM

Strangely, you do NOT need to know how a computer works to write programs for it. It's nice to know and can give you better insight. However, these days it's more common to write for a virtual machine, taking bare metal entirely out of the equation. If you were writing traditional compiled code, you'd still mostly be up on the OS layer, with the lower levels not being your concern.

What you must understand is the environment you're working in and writing for. C# is a good example of this. You write to the framework and ideally write only managed code. This code is theoretically portable across any system that implements .NET. Java is the same. You write to a JVM and try not to think about where that JVM is running.

So... you want to know how to make a WinForms application? Use C#, start with hello world, go from there. Essentially, define what you want to do, figure out the tools you want to use to do it, and then find out how those tools achieve your objective.
Was This Post Helpful? 1
  • +
  • -

Page 1 of 1