Programming

by rrusczyk, Jan 19, 2009, 11:28 PM

If you learned how to program in the last 5-10 years, how did you learn how to code? Specifically, how did you get started -- did you take a class? Have mom, dad, brother, or sister install something for you? Poke around on the internet to figure out how? (And if so, where?)

Back when I was a kid, it was easy to start -- turn on your computer, and away you go. Nothing to install. No fancy programs to figure out. Just turn on the computer and start hacking away. Now, it's much harder to take that first step if you don't have someone to show you how. I think this is a big part of why my generation (roughly) was much more likely to code than subsequent generations. Windows and the Mac have made nearly everything better than it was under DOS and Apple II, but not getting started with programming. I hope some day to make headway in changing that in a small degree by building something at AoPS that will help this, but I think that may be a ways off. In the meantime, I'd like to learn about how students start programming now.

Comment

18 Comments

The post below has been deleted. Click to close.
This post has been deleted. Click here to see post.
This XKCD came to mind:

http://xkcd.com/519/


I'm even older than you and had the same experiences being introduced to BASIC in middle school.

My own kids have had a lot of fun with multimedia tools like Gamemaker but I also wanted them to experience more actual computing. I am not a programmer myself, but we had some success with the following:

We had them doing Logo very early. I guess it is officially a scripting language because it doesn't compile, but it provides an immediate payoff for even the youngest kids. The Great Logo Adventure was a useful book which also teaches some very basic geometry.

After this we did the EPGY C++ courses which provided a pretty good foundation. EPGY had plenty of programming projects but all in text rather than graphics.

We followed those with the eIMACS Scheme course. In retrospect, and for my younger son we may start with Scheme before C++. Before teaching any "programming" the Scheme course started by teaching logic. My first son has really enjoyed the other eIMACS courses as well.

I'll be following this thread with a lot of interest. They have just begun playing around with Java / Netbeans but I'm not sure what the next logical steps might be.

by djcordeiro, Jan 19, 2009, 11:49 PM

The post below has been deleted. Click to close.
This post has been deleted. Click here to see post.
2 years ago, in 5th grade, I wanted to learn Java, so my dad installed some stuff on the computer for me. I used various online tutorials and borrowed books from the library. I even figured out how to make a ping-pong game(admittedly with the worst graphics in the world, but it worked, and that's the important part. :P ) After about a year and a half I got more interested in math and spent more time on AoPS than playing around with Java(it was more of a hobby sort of thing rather than a serious effort to learn.) By now, I expect I've forgotten pretty much everything - I can't even remember how I made that ping-pong game.

by isabella2296, Jan 20, 2009, 12:04 AM

The post below has been deleted. Click to close.
This post has been deleted. Click here to see post.
xkcd... been meaning to blog that site for a while. Classic geek humor. The comic you linked to is very related to what got me musing on the purpose of education in that post a few days back -- I think computer programming is one of the very few real skills that school offers anymore, and that's in sharp decline, as exemplified by the College Board axing one of the CS AP tests...

by rrusczyk, Jan 20, 2009, 12:08 AM

The post below has been deleted. Click to close.
This post has been deleted. Click here to see post.
The concept of programming is relatively simple, so once someone gets pass the downloading step, it should be easy from then on.

If you're only programming to run a simulation or carry out a straightforward computation (i.e., not creating a graphics-filled program for someone else to use), you can just JavaScript (hey! stupid people exist, you know) it.... that doesn't require any downloading; just Notepad and a normal browser. I even found the process of downloading the files for $ \LaTeX$ a bit complicated, and gave up for now on Asymptote... :oops:

My dad tried to show me some C#... bleh. I don't like having a helper-program thing like Visual Basic (or whatever they're called); it's nicer to have full control and understanding.

by leoxnlin, Jan 20, 2009, 12:29 AM

The post below has been deleted. Click to close.
This post has been deleted. Click here to see post.
I started with HTML: ooh pretty colors! :) From thence, I learned Javascript so I could make cooler rollover thingies and interactive stuff; that was all I needed or used for a long time. Ruby came next, though I don't really remember it anymore, so I could have freestanding programs (and there was a great free online book on it from the Pragmatic Programmers, and it was a great book). Python came next, it having nicer GUIs and the indent style I used by default, as opposed to Ruby. I learned Java for the AP, discovered USACO somewhere around there, and Java-did USACO for a year. Then I learned C so I could do better at USACO, C++ to do better at Topcoder, and that's about my history of CS language-learning.

GUIs are important to get interested, and I think it's really cool that GNOME will have Javascript apps on the desktop. But after that it's important to have pointers and types and things.

by solafidefarms, Jan 20, 2009, 12:57 AM

The post below has been deleted. Click to close.
This post has been deleted. Click here to see post.
My first exposure to coding was a little bit of BASIC, probably in 4th grade or thereabouts. My dad taught me to play around with some of the most basic features--input/output, messing with variables, if/then/else statements, and loops with GOTO. I did a bit of that, then must have lost interest. Skip ahead to my sophomore year of college; that was when I took my school's first intro to programming course (taught in Java).

by Sly Si, Jan 20, 2009, 1:33 AM

The post below has been deleted. Click to close.
This post has been deleted. Click here to see post.
I would have to disagree about Macs not making programming easy to learn.

Python is included with Mac OS X. I was playing with it just for fun the other day. Playing with Python from the command line is a lot like playing with BASIC was back in the day. And sample code is just a Google search away.

by dethier, Jan 20, 2009, 2:47 AM

The post below has been deleted. Click to close.
This post has been deleted. Click here to see post.
We just watched some relevant lectures in "Physics in Your Life" published by the Teaching Company:

http://www.teach12.com/ttcx/CourseDescLong2.aspx?cid=1260

For people who like tangible, bottoms up explanations (like my younger son) this was great. He starts with silicon atoms, explains how they create transistors and ultimately explains (through batteries, wires and light bulbs) a variety of logic gates (AND, OR, NAND, NOR, XOR).

For students who are very tactile maybe those Radio Shack circuit kits are a first good step or maybe even building a computer from components.

I seem to recall reading in a book on Hewlett and Packard that for that generation radio kits were their PCs. It basically invited a bunch of hackers to learn technology with a soldering gun and a bunch of vacuum tubes.

by djcordeiro, Jan 20, 2009, 3:19 AM

The post below has been deleted. Click to close.
This post has been deleted. Click here to see post.
I learned C about 8 years ago, when I was in the fourth or fifth grade, basically off of library books. Then I moved on to learn C++, Java, and a large amount of other languages (web design—HTML, Javascript, etc.; C#, .NET in general, Obj-C/Cocoa, scripting languages like Python, PHP, Perl, etc.). I've been studying these languages since then, and I use them actively in the field of robotics.

Of course, encountering these languages exposes one to a world in which tasks that were previously incomprehensible become mundane and meaningless. That's how I got into hacking... a desire to make things work in ways they aren't supposed to :wink:.

(Specifically, look up "iDemocracy," which was a little project of mine while I had time to be working on iPhone hacking).

I'd agree that it's a good idea for these skills to be taught in schools; for the problem-solving skills, if for nothing else. Though I'm taking the AP Computer Science course at my high school, and it's spectacularly boring. As is AP Calculus, of course :lol:

by grn_trtle, Jan 20, 2009, 10:05 AM

The post below has been deleted. Click to close.
This post has been deleted. Click here to see post.
this is definitely worth checking out: http://hacketyhack.net

programming is not hard to learn these days. i've learned all i know from the internet, just searching and looking at code people have written. the open source community is great in this regard.

by chess64, Jan 20, 2009, 12:52 PM

The post below has been deleted. Click to close.
This post has been deleted. Click here to see post.
I think one of the biggest barriers to entry to programming is getting a working compiler. This is now better, but when I was starting to program I spent around a year off and on trying to get a working C++ compiler on my (Windows) computer.

by yisun88, Jan 21, 2009, 1:02 AM

The post below has been deleted. Click to close.
This post has been deleted. Click here to see post.
This won't serve as an introduction to programming, but there is an educational masterpiece worth knowing about: The Elements of Computing Systems by Nisan and Schocken. In this book you make a computer that can play Tetris from scratch, starting with nand gates and ending with an operating system. The whole thing is just so well done, a work of genius. Perfect for AoPSers who know some programming.

by Singularitarian, Jan 21, 2009, 7:28 AM

The post below has been deleted. Click to close.
This post has been deleted. Click here to see post.
yisun wrote:
I think one of the biggest barriers to entry to programming is getting a working compiler. This is now better, but when I was starting to program I spent around a year off and on trying to get a working C++ compiler on my (Windows) computer.

This is so true. Luckily, when I got started, I had a compiler already on my computer. However, it costs a significant amount of money to buy something like Microsoft Virtual Studio, and the gcc compiler with emacs/vi is just not very friendly for beginners.

by bowei, Jan 22, 2009, 4:22 AM

The post below has been deleted. Click to close.
This post has been deleted. Click here to see post.
I think Microsoft has made their compilers a free download now:

http://www.microsoft.com/express/vc/

by djcordeiro, Jan 23, 2009, 11:14 PM

The post below has been deleted. Click to close.
This post has been deleted. Click here to see post.
Quote:
Python is included with Mac OS X. I was playing with it just for fun the other day. Playing with Python from the command line is a lot like playing with BASIC was back in the day. And sample code is just a Google search away.

And how would a kid know this (or anyone else -- I have 2 Macs and didn't know this)? Or know where to start? It would be nice if they had a big fat icon on the desktop, but that's not going to happen. With the text-only computers, there was basically nothing else to do but play around at the command line, so it was easy to stumble into coding.

(That said, including Python like this is a big step in the right direction. We'll include that fact, and how to get started, in whatever programming resources we eventually develop.)

by rrusczyk, Jan 24, 2009, 1:53 AM

The post below has been deleted. Click to close.
This post has been deleted. Click here to see post.
My first programming language was C back then. And I got my books from the local university library. I agree that one of the major obstacles to get started is a compiler (and to set up things as class path to various things) and being able to make use of the Integrated Development Environment (IDE, kind of sophisticated text editor). These issues are less of a deal on Linux (or MAC) operated machine.

I have some programming experience and thus I would like to give a recommendation:

If you want to start with Java which is a good choice. Get the book "Objects first with Java". This is not book about Java. But how to learn programming, structure code, design and write code that can be easily maintained. Initially this book is not using any IDE as Eclipse but BlueJ which is simple like a text editor but let's you view what the "content" of variables and objects just while running your code. Java is a good choice because it can be easily downloaded and upon installation most things are set up. And for BlueJ there is also nothing to be done except installing it.

Another good choice for a first language which is easy to deal with is Python and can be self-taught with the useful books from O'Reilly. The third path that I can recommend is Ruby and the book from the Pragmatic Bookshelf.

If somebody tries to learn C++ as a second language I recommend "A Complete Guide to Programming in C++" by Peter Prinz and Ulla Kirch-Prinz.

I also recommend to read the following excellent book at the same time:
Structure and Interpretation of Computer Programs.

Once you managed to get the first things coded up I recommend some more theory to learn more about data structures and algorithms. The books by Robert Sedgewick and Thomas Cormen are suitable for that purpose.

And then to tune up to get closer to the competitive edge you may want to look at and participate in online programming olympiads as the USA Computing Olympiad.

Somebody asked on the forum whether there is an olympiad class on combinatorics. And I must say tasks from USACO can be quite mathematical. I think it is excellent to learn discrete math, combinatorics, graph theory, computational complexity theory for algorithms etc.

by orl, Jan 24, 2009, 2:46 AM

The post below has been deleted. Click to close.
This post has been deleted. Click here to see post.
I got started in programming in a really weird way. One of my friends found out about a programming competition. He called me and asked me if I wanted to join his team. I agreed and we decided that we should learn a language and a good language. So, we learned java. So, I actually learned programming for a competition, not vice versa. It was really easy getting started, I just googled java programming and there I found eclipse and in half an hour I had a program that just outputted stuff. I am now learning C from my brother's university's lecture notes.

by Poincare, Jan 25, 2009, 3:10 PM

The post below has been deleted. Click to close.
This post has been deleted. Click here to see post.
I started about three years ago, in seventh grade. I knew squat about programming but was pretty comfortable with computers. I asked my computer lab teacher how to make a computer do what you want and she mentioned something about C++.

I went out to Barnes & Nobles and picked up a book on C++ and trudged through it. It was slow going at first and my style was absolutely horrible. I still have some of my early programs and looking at their code is a bit funny.

What actually turned me into a decent programmer was practice. Even though I wasn't any good at programming, I practiced and learned a lot from experience. I learned how to think abstractly. So while I learned syntax from a book, I learned how to program from practice and experience.

by Paiev, Feb 8, 2009, 1:57 AM

Come Search With Me

avatar

rrusczyk
Archives
+ December 2011
+ September 2011
+ August 2011
+ March 2011
+ June 2006
AMC
Tags
About Owner
  • Posts: 16194
  • Joined: Mar 28, 2003
Blog Stats
  • Blog created: Jan 28, 2005
  • Total entries: 940
  • Total visits: 3312921
  • Total comments: 3882
Search Blog
a