What is computer programming? (Really)

<p>Ok, so this thread:</p>

<p><a href="http://talk.collegeconfidential.com/massachusetts-institute-technology/1007289-teach-yourself-programming-10-years.html%5B/url%5D"&gt;http://talk.collegeconfidential.com/massachusetts-institute-technology/1007289-teach-yourself-programming-10-years.html&lt;/a&gt;&lt;/p>

<p>made me feel really stupid. Like really, really stupid. And not because there's anything wrong with it, no. But because I am 20 years old, have grown up in the U.S., and in MIT as a course 18 (math), and I have NO IDEA what computer programming is. </p>

<p>I am not kidding. I really have no clue. </p>

<p>And although this has seriously bothered for a long time, this time it bothered me enough for me to come to the forum, on a Saturday night, and write this thread, asking you all to please, please explain to me what is computer programming.</p>

<p>I've looked this up so many times on the Internet before. As in, I've gone to "howstuffworks" and looked it and I can never understand and come off knowing just as little. This is literally all I know:</p>

<p>I know there's such a thing called a computer. It has a monitor or a screen where you can see stuff. It has a keyboard where you type. It has a mouse. And it has the memory (a hard-drive.) That's it. The problem with the vast majority of resources of "what is computer programming?" out there is that they start at a level that I haven't even reached yet. Stuff like: "Then there's the motherboard." And I am just sitting there wondering what IS a motherboard. I don't understand. It makes me so frustrated. </p>

<p>There's a piece of silicon inside the computer. It's green. Then there're a lot of wires. How do these work, I have no idea. How you "program" I have less of an idea. I am such, such, a Noob. Anybody trying to explain to me what computer science is about and why so many people are so excited about it has to assume they are talking to a person from the Middle Ages. </p>

<p>I know HOW to use a computer, but just as much as any other 30-year old layman can: I can download music and create new folders and write in Word. But that's it. </p>

<p>So wrapping up this rant: Can anybody PLEASE attempt to explain what is computer programming (beginning as how how a piece of silicon can well... do this "magic thing" and have a screen with pictures and colors and stuff) or at least give me some resources that are for the very, very, very basic lay reader?</p>

<p>Thanks guys! =/</p>

<p>P.S. Although I am a sophomore, I just transferred to MIT. However due to extraneous circumstances, after a month of the Instivte, had to come back home and defer my enrollment until Spring. So no, I haven't actually taken any classes at the Institvte yet. Which may in part explain my deep, deep, bottomless ignorance on Course 6.</p>

<p>I am not really qualified to answer your question well or completely, but I can at least begin by saying that you are confusing hardware and software somewhat.</p>

<p>If you write a computer program, you basically open a text editing program and begin to write things that the computer will understand. There are all kinds of predefined code words that you can use to help the computer understand what you want it to do. You can assign values to variables and then make the computer do things with them. You can make the computer prompt the user of your program to type something, then you can tell it to do some math, or rearrange the text according to some rules, then display the result, etc etc. You can continue doing this in ever complicated fashion until you have a program that solves a certain type of equation for you, or a web browser, or Adobe Photoshop.</p>

<p>The bit about the little piece of silicon and wires and how on earth they manage to know what the heck you’re talking about is in some ways an entirely different subject. I was not Course 6, so I don’t know how deeply MIT got into those sorts of things. However, I would not hesitate to say that the vast majority of computer programers in general don’t have a clue how the computer ACTUALLY works either. It is quite possible to learn C, or python, or Java, without having the faintest idea what the motherboard is.</p>

<p>^ That’s what 6.004 is for! :D</p>

<p>A computer is a programmable calculator. What sets it apart from a ‘normal calculator’ or other machines is its programmability - one can write software for it. This is a layer of abstraction above the hardware. There is no need to rewire a computer in its hardware layer to repogram it if your program remains within the bounds of what the hardware of the computer allows. The same computer that allows you to browse the web allows you to play games or store spreadsheets, etc.</p>

<p>Computer programming is the act of writing programs for the computer.</p>

<p>Myself, I love programming and believe it to be an art, very similar to poetry. One must be able to convert his or her human thoughts into mechanical and algorithmic form understandable by the computer. For this you must break down your understanding and rebuild it in a different way. The same problem can be solved in many ways, and some of these ways are utterly beautiful and elegant, just like a proof in mathematics. I’ve had great fun experimenting with this stuff in my free time, I hope I can do the same as my ‘main focus’ at a place like MIT next year, with the same spirit of experimentation and exploration. ^_^</p>

<p>Another reason it is so interesting is the versatility - you can program a robot, write a graphics application, a game, a solver for a sudoku puzzle, an operating system of your own, a window manager, etc. There are so many things you can play with, and they all stem from the same idea - a bunch of logic gates and flipflops doing your bidding.</p>

<p>

</p>

<p>Yeah, this course was a great idea. I was pretty advanced in high school (organic chem, most of college math), but didn’t do anything with computers beyond excel spreadsheets and word processing.</p>

<p>Reading manuals and making friends with people who know about computers (and 6.004) is probably the best to reach the minimum threshold to learn from programming books in bookstores.</p>