This week's book giveaway is in the OCAJP 8 forum. We're giving away four copies of OCA Java SE 8 Programmer I Study Guide and have Edward Finegan & Robert Liguori on-line! See this thread for details.
What I learned to program before 18:
- basic Logo (sometime in elementary school)
- a tiny bit of Basic (around 13) - read a book before taking the C++ class
- a tiny bit of C++ (around 14) - this was a summer camp but I played with writing loops and such during the free play part after the lesson. This is where I learned about the programming trance and realized that was what I wanted my career to be
- intro to Pascal (16) - AP Computer Science in high school
- intro to C++ (17) - AP Computer Science in high school
- basic Java (17) - on my own so I could place out of Intro to Programming in college
I don't see why so many people are against kids learning programming. We learn lots of things in school that we never use again. It is meant to explore interests. Plus, learning to think logically is a useful skill. Explaining to someone else how to do something helps in any job.
I do think it is a problem if the idea is that teaching programming in elementary school will teach the students what they need to get a job. Cranking out code is a small piece of being a developer. But if it sparks interest in more students pursuing technology, that is definitely a good thing. Particularly because some technologies that will be important when they graduate in 10-15 years don't exist yet.
Pascal at Glasgow university in 1982, plus a bit of tinkering in Basic on a friend's Sinclair Spectrum around the same time.
I think teaching kids to code is like teaching them foreign languages: the younger the better, provided they have the interest and basic skills to enjoy it, and some inspiring teaching to get them started.
My neighbour recently asked for tips on teaching his boys (8 and 10) to code (he wanted to learn with them) so I suggested Python with the Hello World book, which apparently was a great success.
I suspect coding, like languages, helps to exercise and develop particular pathways in the brain, so it becomes easier to develop and expand those skills later on.
I started Pascal during high school, in an optional class; then i studied c as autodidact.At university i learnt Modula2, c++, and then java.
About teaching children of elementary school programming:i think that in itself there's nothing wrong with it.I don't know anything about us school system,but
in Italy often there's a rush to modernization which is not only unnecessary and sometimes leaves back most important thing:direct knowledge and ability in descerning concepts.when i was young, we were often asked to compose brief essays on various topics (science, history and so on).You needed to read books, encyclopedias and summarize what you believed important leaving back what was secundary yo the topic. Now a lot of schoolboy just prints wikipedia's page and their teacher accept - often -suxh work as an essay. A real pity in my opinion..
We had a ZX Spectrum at home back when I was about 6 years old, and I was fascinated by all those amazing games.
Wanted to write games like that.
So started with ZX BASIC (which was the default "language shell" in ZX spectrum...you booted it up and it dropped you straight into a BASIC interpreter prompt!) when I was around 10, with most of my coding centred around its 2D sprite graphics and sound capabilities.
Was fortunate to have a dad and elder brother who were already into hobby programming at the time, so had all the books already at hand.
As for benefits, starting out with graphics programming helped me ace analytical geometry and trigonometry in junior and high school, because I could now understand them intuitively.
That's just one example, but in my opinion, learning to code also helps us in other fields, .
Instead of graphics, had I started out coding something more related to number theory, I'd probably be very good at cryptography today.
I just thought about it a few days ago, that in December it will be 30 years ago that I got my first computer: a Commodore 64. I was 13 at the time. It was the most popular home computer in the 1980's. Many of my friends at school also had one. Ofcourse, compared to today's computers it was very primitive - 64 KB RAM, and an 1 MHz MOS 6510 CPU.
It came with a manual that explained how to program in Commodore BASIC, so that was my first programming language. It was a lot of fun, and after some time I also started programming in assembly language. After maybe two years I knew the whole computer inside out.
After the Commodore 64 we had an Amiga 2000. I bought a C compiler for it, and learned programming in C.
Later, in my first year at University, I got my first PC, a 386SX, 20 MHz, with 1 MB RAM, with MS-DOS and Windows 3.1. I learned to program in Pascal (using Borland Turbo Pascal) and C++ (using Symantec C++) on that.
I learned Java somewhere around 1998. I had my first job, working as a C++ programmer, and I had heard about this new thing called Java. Together with a colleague I started a hobby project to write a chess playing applet, which we demonstrated to other colleagues. It didn't take long and then we got our first professional Java jobs.
The first J2EE project I did with with BEA Weblogic 5.1, around 2001.
About teaching programming to kids: The home computer revolution of the 1980's brought forth a whole generation of programmers. I think it's a great idea to let kids experience at least the basics of programming. Ofcourse they don't all need to become programmers, but it's great if some of them discover something they really like - just like I did when I was 13. And for people who will not become programmers, at least they will hopefully understand a little bit what it's all about. For most people computers are mysterious and magic, while the whole world is dependent on computers. As a programmer you've probably noticed how hard it is to explain to someone who doesn't have any idea how computers work, to explain what you do at your job...
My first exposure to programming was on some sort one-day event with primary school - that was when I was about 11. It would have been BASIC, on a ZX81 or Spectrum (can't remember which). I learned "properly" at secondary school, BASIC on an Apple II and BBC.
Then I had a bit of a gap. I didn't do any programming between 17 and 21, then I learned FORTRAN in a summer job and carried on using it as a postgraduate student.
I think it's very useful to pick up the logical skills you learn through programming. On the other hand, I've seen people saying that "with the importance of computers nowadays, everyone needs to know how to program", and I can't help but think "do they, really?".
Wow. Nice to see other ZX spectrum programmers here
I started programming when I was 13. When I was 12, my dad got a book about computers, and I fell in love with computers. I really wanted a computer. My mom asked my uncle who lives in London, and he got me a ZX spectrum. It had 64k of memory, and a tape drive. It ran Basic only. The whole computer was a basic interpreter. You put your normal audio cassette in the tape drive. If you wanted to load a program off the tape drive, you had to wait till the tape rolled up to the correct place. It took a while.. And we liked it.
The way the computer recorded programs on the tape was by FM modulating the program on a carrier wave... Much like fax modems do. While loading a program, the spectrum would "play" the audio, and create a pattern on the screen that mirrored the digital data. So, all throughout it would screech like a fax modem ... For 20 minutes if the program was at the end. A lot of people get annoyed by the screeching sound of a fax modem. But to me, that was the sound of a favorite game loading up.
The Basic language didn't have any loops, or functions. Just if and go to. We used to write spaghetti code.. And we liked it. My brother and I replicated a side scroller game on the basic. He did the art and I did the programming. The sprites had to be coded in an 8 x8 array. You had to manually type in the rob values by hand into an array. So, what we did is, he would make the sprites in a graph paper, and I would painstakingly figure out what the color of each pixel was. I told him to use only 4 colors or so. That way I didn't have to spend time matching the color on the screen with the color on the graph paper
Anyways, the computer broke. By that time everyone in my extended family would buy me programming books. These were basically listings of programs that you could type by hand into the computer. One auntie bought me a commodore book. I was so angry . So, the computer broke, and I had nothing to do. So, I started reading those programs. I started noticing these patterns they were using. Like if I had to do something 5 times, I would type in code 5 times. But what they did is use a counter and if and go to to implement a for loop. Of course, I didn't know that for loops existed. I thought I had discovered for loops.. And while...and do while..... And functions! Do you guys have any idea how awesome it is to put code that you have repeated many many times, and put it one place. Of course, you guys know. But have you felt it? I used to type the code again if I needed it again. Hand typed it all again. Why? Because ZX spectrum didn't have copy paste that's why? Not having copy paste makes the awesomeness of DRY to a whole another level
I went to my brother all excited and told him this technique that I have discovered that would make the code simpler. I told him I wanted to use it once the computer was fixed. He is all "why do you want to increase the risk? Why don't you stick with what you know works?" The PM-programmer dynamic at play... At 14.
I first encountered programming at school ... and I didn't like it We were learning to draw flowcharts, which really wasn't anything even remotely exciting. Then we used the infamous IQ 151 "computers", which have the reset key placed conveniently next to the other keys on the keyboard (actually the keys felt more like buttons). The details are hazy now, but I remember that working with it was terribly painstaking. Oh, and we used KAREL as the programming language.
This was in in the year 89/90, when the communist rule in my country ended, and in these years the school curriculum changed dramatically. So there was no compulsory programming course the next year (truth be told, I don't know whether it would be included in the "communist" curriculum). But in these years a friend of mine got ZX Spectrum, and after spending some time playing all these awesome games, I started to dabble with Basic on it. I believe I had to learn the ZX Spectrum BASIC from some book, since, unlike Jayesh, I had known about the for loop and the gosub statement right from the start. But since the computer wasn't mine, I couldn't spend as many hours on it as I would have wanted , so I programmed mostly on paper, trying to get the program right, and then retyped it on the computer when visiting that friend of mine - sort of similar to how mainframe computers were programmed I even borrowed (and read) a book about assembler programming on ZX Spectrum, but was unable to get any assembler compiler for ZX, so all that effort was lost.
And I've nearly forgotten about another machine - something like a better programmable calculator. It had a QWERTY keyboard, 12-character display, a built-in basic and exactly 1536 bytes of usable memory (I still remember that!). I'd spent quite some time trying to rewrite programs to take fewer bytes...
Still without a computer I learned Pascal completely from a textbook. I remember I had troubles getting the concept of pointers, and spent at least a week on them, nearly giving up. The next year I choose programming as an optional subject in school, and we were already using real computers (XT's and AT's at that time). As a school project I wrote the KAREL interpreter and environment in Turbo Pascal (the Turbo Vision framework), and my school used it for quite some years after that to teach basics of programming (poor pupils, I didn't have time to implement support for mutual recursion, without which the language was even more boring than usual).
These were the exciting beginnings... I've actually tried to remember why have I chosen computers as my career. Before that, I was very interested in chemistry, and had a makeshift lab in the bathroom. (I was evicted from home to the backyard by my parents after one experiment that turned out to be particularly smelly; it involved creation of bromine, which comes from Greek and means "strong smelling" or "stench". I was probably lucky I didn't get poisoned by it.) But my interest didn't outlive transition from anorganic to organic chemistry - it's much more complicated to do something in organic chemistry, either working out the equations, or obtaining the necessary reagents. What I liked about it (the anorganic chemistry) was that I could quite easily put my ideas to test, and this was similar with computers. I wrote something, and the result were on the screen in the next few seconds - and I loved it. I love it to this day, I often play with the programs I create, even with those I create for work. Some people probably have it different, though - we had a colleague who seemed pretty uninterested in the result of his creations. I've never understood what it was he liked about programming - or whether he liked it at all.
1981, Fortran and COBOL and they bored me. I decided I didn't want to spend my career sitting in front of a green screen or keypunch machine. So I got into the hardware side of things servicing IBM mainframes (360, 370, etc). Then the first PC XTs came out and I was installing and servicing them at General Motors. They were fascinating to me. Adding 10 megabyte hard drives was a popular option along with upgrading the memory from 256k to 512k. After a couple of years of that, I knew the hardware inside and out but software was still a mystery to me so that was the next step. I stared with GWBASIC, then Turbo Pascal, then assembly language using Peter Nortons book. I tried to learn C but just couldn't get my head wrapped around pointers so I stuck with Pascal for many years, but programming was still just a hobby. My job was hardware technician. Then about 6 or 7 years ago I realized that my career in hardware had gone as far as it could go and I had to decide what to do with the second half of my career. I considered all the things that I had done over 25+ years in the IT world and realized that what I enjoyed the most was the challenge of programming. So I locked myself in a room with a computer and a stack of Java books. I stuck with it and got the SCJP and here I am.
I agree that introducing kids to programming at an early age is important, just like a foreign language because in fact, that's exactly what this is. Even if they never become programmers, they will learn analytical thinking which is something our schools don't teach very well.
"The good news about computers is that they do what you tell them to do. The bad news is that they do what you tell them to do." -- Ted Nelson
Hmm let see, didn't touch/learn programming in high school. First programming course was in C in freshman year in college. Then the fun starts. From 2nd year to graduation, learned Scheme, Assembly, C++, PHP, and VHDL (IC programming). Oh yeah SQL and HTML/JS almost forgot those.
There weren't any Java yet my final year project was in Java. But back then, I really didn't know what the code was doing because someone else on the team is doing it.
Since grad, got into banking a few years doing CL and RPG for AS/400. Then into web again doing PHP and some Java (that's the time when I got serious about Java and got SCJP after a .NET vs Java weigh-in).
Henry Wong wrote:First language was BASIC, in high school, using the school's Commodore PET computers.
I learned to program in BASIC and Pascal at 21, in 1987.
I studied Chemistry. I never really was into computers in my youth. I was into general science, like Physics and Chemistry. In those days not everyone had a PC. At the University, I found out I was rather crap in doing the lab labour as a Chemist. And I was good at programming. So I switched from Chemistry to Computer Science. I am still not very much interested in Computer Science. I mean, I like it as a job, but it is not my great passion. In my free time, I dont really use the computer for fun. That is caused by RSI (neck pain from sitting too much behind the computer) from one hand, but just lack of real passion from the other side. I dont hate programming, dont get me wrong, but I dont really love it either, and I did not do it as a child nor as a teenager in high school even. I dont know if that is good or bad. I am more all-round, but, yes, I lack real passion for the job sometimes.
I had exposure to computing from quite an early age. My folks had an old Atari games console, the old cartridge one with the black and faux wood case. Then when I was about 10 or so my folks bought me an Amstrad CPC464 but I wasn't much interested in programming on it, just playing games. I did have a go at Basic programming but I was soon distracted by the Grand Prix Simulator game cassette on the shelf just there.
My Dad worked for Unisys at the time so our study was full of CTOS machines. My favourite game on there was called Rats.
Computers weren't quite common place when I was at school so didn't get much exposure there until I went to Aylesbury College in 1996. There I learned how to program a 6502 processor with assembler and how to write procedural programs in Pascal. We also learnt about a program design/composition tool called Jackson Structured Programming which seemed to me at the time to be the most inefficient way of putting a program together known to modern man.
At University in Plymouth I did an Electronic Communication Systems undergraduate course which had a module of C programming. I loved it. I went down the University Bookseller, picked myself up a copy of K&R and that was me. I went on to do a bit of C to control a wheeled robot with some Atmel processor. On the side a friend and I liked to mess about with programming an 8051 microprocessor dev board we had (I still have this).
Then at University in Bath I did a Comp Sci post grad with was mostly programming with Oberon-2 which I actually quite liked. I also did work there with Answer Set Programming, which is a bit like Prolog.
After Uni I got a graduate developer job doing some more C programming. Then a Java project was coming up so they stuck me on a 2 week Java crash course and I've been doing mostly Java ever since.
These days I like to explore other languages and programming paradigms such as Scala, Groovy, Clojure, Erlang, Haskel. I am intending to check out C# just to see what all the fuss is about from my colleagues.
Jeanne Boyarsky wrote: What do you think of teaching programming in elementary school (age 11 or younger)?
The problem in learning programming at a young age is understanding that you really have to get to the level of the computer to be able to instruct it. It was something that I I understood instinctively but had problems explaining it to my friends. You really have to get into the computer's mind. When you say A +1, it;s really A + 1. It's not A = A + 1. Most people when they start programming, (even non-programmers), expect the computer to be logical. They expect the computer to know what is the right thing to do and just do it. They have a hard time grasping that the computer is not going to do what's logical. It;s going to do what it's told
I remembered all this when I was trying to teach my 6 yo how to program (and being 20+ years older now, I could analyze it with an adult's mind). There is a website called hour of code that is designed to help kids understand coding. They use Angry birds as a metaphor. Basically, they have a pig on the screen and a bird and the "game" is to take the bird through a maze to the pig. The way you take the bird is by giving instructions. The instructions are move-ahead, turn-left, turn-right.
They start off with just a straight line. That was easy for him. Move-ahead 5 times, got the bird. Awesome!
Next, the maze was L shaped. It had a left turn. So, now he started getting stuck. The command left-turn would make the bird face left. So, you had to make the bird face left and then move the requisite spaces. He expected the bird to face left and move ahead in one operation. After all, that's what he would do, right? It seems illogical to merely face left and do nothing. But the thing is what seems logical from his perspective doesn't matter. His job (Our jobs, really.. he doesn't have a job) is to understand the instruction set, and the rules of the instruction set, and then make the bird to what he wants to do by following the rules of the instruction set. There is no rule that says the instruction set has to be logical. Yes, it makes our jobs easier if the instructions did exactly what we intuitively expect them to do. There are times when you are learning a language where the language seems unintuitive, and really you have to able to shut your mind up and put yourself in the computer's mind to be effective. Anyways, I could explain to him that turn-left is really face-left. He understood it rationally, but it took some mental effort for him to get through it
Next, it was a Zig zag shape. You had to go straight, turn-left, go ahead one step, turn-right, then go ahead. SImple enough, right? No the problem is he wanted a whole new instruction called step-left. It's perfectly logical, right? He would merely step left. WHy would you want to do a series of turns when you can step left? That's what he would have done. But the thing is there is no step-left. You can;t just make up instructions! The game wouldn't let you. And really computers don't let you. Oh well, you can always write procedures, but you need to be able to write code in a straight line before you think about procedures. I was proud of him for figuring out a "better" instruction set (thinking out of the box yadda yadda) but end of the day the bird was not reaching the pig. SO, then I explain to him that there is no step-left and he has to use one of these 3 instructions. Now, he had difficulty getting into the mind of the bird. So, he went ahead, face left, move ahead. From the perspective of the bird, the bird has to face right and move ahead.. But from his perspective, the bird has to go straight. So, he was "go ahead, turn left, go ahead and then... go ahead. Why doesn't it just go straight? Why is it getting stuck? The bird is so stupid. Just go straight!" The thing is he wanted the bird to do the logical thing. But the bird insisted on doing exactly what he would tell it. He wasn't able to make himself be as stupid as the bird.
At this point he was getting frustrated, so we just stopped. He didn't even go to the part where they talk about loops
This is my experience based on interacting with my friends in high school. Obviously, Jeanne, you have a better handle at teaching kids to program than I have
Jeanne Boyarsky wrote: What do you think of teaching programming in elementary school (age 11 or younger)?
It's quite a good idea.
I learned Logo as my first programming language at age 11. For next 3-4 years, I studied D Base, Basic etc. as part of curriculum.
Then at age 15, I started to learn C++. I studied it for 2 years (without learning C) in my junior college (here, we call standard 11 and 12 as junior college ).
It was at this time I figured out fun of programming (and I found out that fixing non-working programs is more interesting ) - so, personally, I treat these 2 years when I actually engaged myself in actual 'coding' and began to give a serious thought about a career in programming.
1975 -- BASIC (in high school)
1980 -- more BASIC (US Navy)
1985 -- REXX, JCL, IBM Cobol, Wang Cobol, C, SAS
1989 -- VAX Cobol, C
1993 -- Visual Basic 3 through 6, plus all the OLE interaction with M$ products.
2002-2013 Non programming career
2014 -- Java
You can throw in the putzing about with Assembler (Peter Norton has a pretty good book on it). Lips, Oberon -- lots of silly things like that. Spent way too much time playing with AWK. There was a Clipper project in there somewhere. i just liked learning new programming languages.
There are worse crimes than burning books. One of them is not reading them. Ray Bradbury
I've never felt the joy of punch tape or cards. As I recall, the Northern Virginia Community College was still using punch cards for its' Fortran coursework in the early 80s, but that's as close as I ever came.
COBOL on a NCR mini main frame, circa 1979. The company I worked at wanted automation. They leased the computer but the NCR accounting software package was purchased with the source code and the right to customize the software. I was working in purchasing and going to school at night (English major). A programmer was hired and she started teaching me COBOL when I got curious about the testing being done as the purchase orders where brought online. Changed my major a couple months later.
My first programming course was FORTRAN programming, starting in the fall of 1967. The first year in which I was paid to do programming was 1968 and the last year in which I was paid to do programming was 2012.
My first exposure to computers was in January of 1970, in a freshman General Engineering class. Punched cards for Fortran running on the administration's IBM mainframe. We were lucky if we got two turn-arounds a day. I think it was Fortran-2, before Fortran IV was out.
Jeanne Boyarsky wrote:I don't see why so many people are against kids learning programming. We learn lots of things in school that we never use again. It is meant to explore interests. Plus, learning to think logically is a useful skill. Explaining to someone else how to do something helps in any job.
There are sound pedagogical reasons that our schools don't teach Algebra until 8th or 9th grade (12 or 13 years old). The human brain develops the ability to do abstract thinking slowly, long after basic motor skills and concrete thinking. I have no problem with teaching a little code, say in Logo, at an early age. But I don't see teaching a lot of coding skills as being a good idea for two reasons:
1) coding itself is not what we need, we need folks who can understand architecture, algorithms, data structures, modular design, etc. and these require at least the skills of Algebra
2) I can't see how learning to code simple stuff will have anything to do with being employable in 15-20 years. When I was an undergraduate, all the cool guys programmed in assembler, that is what you aspired to. Programming macro assembler quickly became obsolete except for tiny specialized areas by higher level languages. I can't imagine that folks will be using Java in 20 years -- yet Java is considered a mainstream professional language today. The concepts of what coding is about will stay valid, but no language-specific skills will have any relevance.
The question about when we are able to learn what is interesting. I have always thought I learned programming from knitting. When I was 8 my mom taught us to knit to keep us busy during a long summer driving trip from California to Montreal, Canada. Once you get the hang of it knitting can be boring so I soon learned to do intricate patterns like those that make Fisherman's cables. Below is part of a pattern.
If you notice in the popcorn stitch the knitter is using a multiple of four and then on Row1 and Row 3 the knitter is repeating patterns that start at *. In other words most knitting patterns are using do-while loops and repeating the actions inside the loop. The number of loops being done is based on the variable of total stitches. In clothing patterns the knitting pattern is the same for all sizes but the number of stitches wide and the number of rows knit are altered to accommodate different sizes.
When I first read a dump of a COBOL program ( my first language) I had no trouble reading the logic because it was just like reading the knitting patterns I had been using since I was eight.
GW Basic in skool. My first project was a banking application. That's when I started liking programming.
Then it was C for several years. I used to be like really good in C programming --still remember those subtle differences that apply depending on where you put the *.. It's also the first programming language I fell in love with. I loved solving data structure puzzle problems in those days and it was because of our instructor.
He was a really cool guy. Every friday we'd get a weekend challenge to work on. I have never enjoyed programming so much as I did in those days. So yeah, I still love C.
Then it was C++. Then I was introduced to Java and I fell in love with it. But my first job was on mainframes -- I've worked on PL/1, JCL, DB2, IMS-DB, Rexx, & MQSeries for some time. Then I shifted to Java programming but I had to do a little bit of other things also like ABAP etc.
Then it was Slang - a programming language, I hate. If anyone has
ever worked in Slang, they will know why. That shade of blue still scares me.
Sec DB was not too bad. In fact I kind of like it.
Thank God, it's only Java now. And I'm loving it.
I'd love to work in Java and Scala some day in a professional setting.