Later, I got Commodore 64, then 128, then Amiga 500 (http://en.wikipedia.org/wiki/Amiga_500) which was such a joy to program. This is where I got my first exposure to C programming (Aztec C http://en.wikipedia.org/wiki/Aztec_C) and VIM. VIM was in fact first developed for Amiga where it was known as VI iMitation (hece VIM), and later back ported to UNIX. In the 90s went to university to study math and computer science and that's where I got introduced to "big iron" UNIX (HPUX). In late 90s I did some Windows C++ development, but I now program for all kinds of platforms from Solaris, to AIX to HPUX to Linux to Windows and Mac OS X and in dozens of languages. We even make our own VI, awk compiler, Perl interpreter, std C lib for all kinds of platforms, POSIX APIs port to Windows and others, port of UNIX tools and shells to Windows and a multi million LOC ALM application suite.
But today's computing really can't be compared to the experience in the 80s, when you as a kid could master your CPU and know its complete instruction set, its registers and important memory locations and feel completely in control. I shudder when I see where general computing is headed with kids dreaming of owning iPads.
I wish too that computers were like they were in the 80's. Growing up now, I remember when to me the System Preferences on a Mac were a place that you didn't go or else you might mess up the computer. Still, with programming knowledge and all, I always get a little bit frightened when I'm about to do something the tiniest bit dangerous that might it so my computer won't turn on, like using `dd` even though I checked the name of the disk I was trying to write at least ten times. I blame it on my generation and the "magic" about computers today that some other HNers mentioned.
The CS classes at Uni seemed really boring, so I went into mathematics instead.
I also went the Commodore route. I still remember when I got my A501, giving me a whopping 1MB of ram!
I used Lattice C, and GCC to a lesser extent. Later, after finding out how hard it was to get ahold of the 3000/UX version of UNIX, I installed NetBSD on my regular A3000. Fun times...
I liked the M68k series so much I eventually wrote an emulator for it, which is used in MAME to this day.
A coworker of mine was responsible for the programming. Mostly perl and php. I had never touched a line of code. Not even HTML. I was doing everything a-la WYSIWYG. The mere thought of having to write code made me cringe but it was obvious that I had to adapt if I wanted to keep receiving pay checks. So I set out to teach myself everything I could about programming in the boss' time.
I scoured the internet and read every bit I could find. I started out with BlitzBasic[1] and C# (It was in beta back then). To my complete astonishment, I actually /really/ loved every bit of it. Since then I quit my job and went home to become a halfway decent programmer. I was adamant that this would be my new career path. And I succeeded!
Around 2008/2009, C# was into its 3rd iteration if memory serves. I had left Blitzbasic behind a long time ago. I was still enjoying every minute I could spend typing code. However, C# had some traits that really started to rub me the wrong way. The 'everything is an object' OOP mentality, coupled with the pretentious and obtuse habit of corporations to not give a shit about skills unless you can recite all design patterns by heart, really made me lose faith in the whole programming thing.
Fortunately, that's when Go[2] came into view and it allowed me to fall in love with programming all over again. I've never looked back to C# since that day. In the meantime, I've also picked up C, Scheme, Forth, Factor and a host of other languages I love working with.
I am very much a D.S.L. kind of guy but Go is definitely my primary go-to guy for most stuff.
[1]: http://www.blitzbasic.com
[2]: http://golang.org
Without any working experience (as a programmer) or paperwork, I knew this was going to be difficult. It turns out that some companies value enthusiasm and the ability to demonstrate you can and will learn fast, as more important. I had both of these on my side, so I got the job.
I did not have a Github profile at the time, but I made sure I showed them a CD with my most notable homebrew work. I would advise a Github profile instead though. Just put everything on there that you feel might be worth it. Even if it doesn't really have any use. It's about the way you write code and go about solving problems that is interesting to the interviewers.
The holy grail was to create a "homing banana", but my 10 year old brain couldn't work out the math.
And most of the programming I learnt was from the snippets of code in the QBasic help files.
Furthermore, I’d say that having an underpowered but batteries-included language helps focus you on the goal of making a thing, rather than the process. It also encourages hacking, to circumvent the language’s restrictions. Could you ask for better?
I basically had no real experience programming until I graduated. I took 2 programming courses in undergrad, one being an assembly language course, and I did a summer internship where I did some Matlab scripting to print out graphs. My 4th year project was using a DSP chip to write an FFT in assembly. So while unemployed I taught myself C++ programming, as well as IT administration and networking. My first job was as an IT guy, but I spent every night after work programming, writing utilities and digital audio filtering utilities using FFTs. Within 2 years, I got a job programming after lying on my interview about my previous job experience and I've been programming ever since.
10 Print "Sears Sucks"
20 GOTO 10
The first computer my family owned was a Commodore Vic-20 and I typed in plenty of proggies out of magazines. They were stored on cassette tapes and we bought a modem - then a phone because we needed to be able to disconnect the hand piece once we'd connected to a bbs and plug the cord into the modem. All our phones were slimline and disconnecting those dropped the call.
The 80s were a really fun time to be a geek.
I distinctly remember that putting the handset in the sucktion cups quickly enough after dialing the number on the rotary phone was hard.
The first real programs was probably later when I bought my Commodore 64 - in 1984. Later I even got a Comal-80 cartridge. Much nicer than the builtin BASIC!
Here is a bar chart of the poll:
· http://koldfront.dk/misc/hn/programming/data.png
(Updated hourly currently.)
Despite the advances in tech, kids today who want to learn to program have it much harder.
Kid wants to make a game, kid programs a game. What's so hard about that? The kid doesn't care about the "barrier to entry" any more than issues like platform, methodology, budget, competition, etc. None of those business decisions are part of their need to make the game.
I'd say the opposite - Kids can cut the crap and stay focused better than most PM's.
Why is that?
Software is generally much more polished now, and it requires much more time and work to get it so polished (assuming it's at all complex).
I'm not saying I agree with this. But the situation is definitely different from 10 years ago by quite a bit.
Outside of that, programming has proven to be one of the most rewarding skills I've ever learned.
12 - "Learned" Java. Didn't understand any of the concepts;
13 - Learned C, Understood a lot more. Read 'Hacking, Art of Exploitation';
14 - "Learned" x86, Wrote first WEP cracking utility for Win32 (distributed as binary at least :) when FMS was new;
15 - Got down to brass tacks and learned deep x86. Wrote first non-trivial exploit for use-after-free condition in Adobe Reader;
16 - Learned Ruby. Wrote first utility to repack the SSDT in Windows rootkits and hook accesses to the first memory page of the service descriptor. (Lots of people do this now);
17 - Learned a lot of Math. Wrote transfer control protocol on top of IP and wrote a lot of Cisco IOS utilities;
18 - "Learned" networking (A wildly complex and massively underestimated field, I'm not sure anyone really knows networking anymore) Reimplemented all of dsniff w/ STP & 802.1q utilities;
19 - Learned Erlang. Wrote my own NoSQL database (zv.github.com/artifact);
20 - Now :)
I ticked 10+, and I am 26. I was designing 'web pages' when I was in middle school, albeit geocities html, but then had my first programming class (C++) when I was 15. Curly braces do not phase me.
DO I ROUND UP OR DOWN!?
It wasn't until I started my masters, 5 years ago, that I did any serious projects and 2 years ago that I did professional work.
So when people ask how long have you been programming for, what is it they are looking for ?
The very semantics of how we describe language advantages and disadvantages reflect this.
"Everything you manipulate is an object, and the results of those manipulations are themselves objects. However, many languages make the same claim, and their users often have a different interpretation of what object-oriented means and a different terminology for the concepts they employ."
Was that Jacques Lacan? Actually that's the pitch of the hit OOP dynamic language Ruby.
I think this is endlessly valuable to young people -- as so many programmers can attest, the key to solving errors seems to be in radical reassessments of your frame and mode of thinking: the nature of the solution to problems in programming isn't about abandoning rationality, as much as it is expanding the nature of rationality into solution sets such that the problem can be solved adequately. I don't think it's at all unscientific to say that when theres billions of hidden local variables at play in a machine, in some way, you have to put yourself at the mercy of a higher power (whatever that designation may imply).
Despite this, you still are the one in control. This is why I think software has something very important to offer kids for this dawning century. As a culture we're losing the real virtues of thinking passionately, of having a sense of responsibility for who you are, making something of your work and feeling good about your work and life in general.
Software, hacking, or whatever you'd like to call it gives you the undeniable feeling that your life is yours to create. Although it's a art mired in abstractions, it's incredibly concrete -- It's you reading this right now, making decisions, it lets you know that although it's true that theres about 7 billion people in the world, WHAT YOU DO MATTERS, not abstractly, but in material terms. A recurring message I see here in this thread is that software allows us to stop writing ourselves off and to stop seeing ourselves as the victim of a confluence of forces, despite us ultimately having no control of the machine beyond our own thoughts, no matter how aged, wizened or jaded with the craft we become.
For work tho', only work counts. Real-world programming is not just about programming, it's doing so within a set of constraints that you don't have a say in (e.g. compatibility with existing systems, OS, deadlines/timescale, specs, users, etc etc). Adapting to these situations is what makes a successful industrial programmer, not what you did as a kid.
*navel gazing.
Naval gazing would be a pretty fun thing to actually.
It would be interesting to see a 3-dim space mapping to years of {hacking, business (startup), investing (vc)} and see how the HN clusters manifest.
And get of my lawn!
Later, I migrated to BASCOM and then QBbasic. Then I pretty much stopped programming completely after high school until I started again, more or less by accident, around 1999 when my boss asked if anyone knew how to make a web page. I thought, "How hard can it be?" and that became my gateway back into programming.
I started programming web applications in Classic ASP. I was somewhat astonished to see that the programming language was VBScript, which looked an awful lot like QBbasic with a few objects bolted on. Once Classic ASP was deprecated for .Net, I jumped over to Python as part of a more general move away from the Microsoft platform onto Linux.
First computer and first programs followed shortly ('81): TI-99/4A and ("16 bits!") "Extended" Basic and mostly sprite based games. Sampled CS in EE school -- punch cards and assembly. Usual EE type Fortran programs, but nothing 'systemic'.
First paid work was working for a startup in my senior undergrad year building a jet engine turbine CAD system (I did the UI framework for picking, menues, etc. -- this is before Windows ;) The other project was a Fortan to C translator which provided the opporutnity to learn (fairly serious) C while contributing to that effort. ('86)
I code (compulsively at times) to this day.
During my middle school years, I got more interested in computers, reading fat books about programming during english class. I made a couple of prank virus programs that I installed on other people's computers. I made a friend who was also like me but he wasn't much of a programmer. I got into computer hacking afterwards when he showed me that it was possible to disable desktop restrictions on the Library's computers, free to download at T1 speeds. So I wrote a program in Qbasic to automate the exploit. I eventually de-friended him as he wasn't a good influence.
There were two other people of influence, both had their own personal websites. That got me started on webdesign, and Java applets programming.(My first java app was an online chat server).
Later on I got into game programming starting with Darkbasic, BlitzBasic and now Unity.
Now at 25, I work as a Linux Sys Admin and SaaS Backend integration. My other hobby is building electronics using PIC chips.
Kids today can have a RaspberryPi to tinker with, I happy that schools are providing them the opportunity to get interested in programming, because in my time, I didn't have that and computer classes only thought how to use Excel and typing skills.
I learned C (from the first edition of K&R) about 24 years ago. And had no one to help me, so I had to understand everything myself and debug my own rampant pointer issues. Eeek! That was a wild ride!
Not to hijack this post, but does anyone else remember their first "cool" program?
Programming can be a very solitary experience, and at exactly the same time very social.
It was a great breakthrough to me when it was realized that line numbers could be derived from the text rather than assigned to the text. I suppose that was only possible when things like the GOTO statement didn't accept a line number.
I must have been about 11 when I started. Happy days!
When I went to Texas A&M in 1981, I started in Electrical Engineering, and took courses in FORTRAN and IBM 360/370 Assembly. I enjoyed those so much that I changed my major to Computer Science. We used PL/I for data structures class, and in the Programming Languages Survey we focused on Ada and Prolog, with brief mentions of other languages. I did a little bit of work for an Engineering professor in Turbo Pascal.
For my senior project, I got to use the CS department's new VAX 11/750 running BSD Unix. For my project I taught myself C so that I could assist a grad student on his "syntax-directed text editor" project. I've been in love with Unix and C ever since then, but didn't get to use it at work for several years.
My first real job out of college started June 1985, and it was programming interactive training systems running in a proprietary courseware design system on Sony CP/M Z-80 computers and Laser Videodisc players. The courseware system was buggy, so I talked my group into using C instead, which allowed us to be more responsive, have less crashes, and put more content on a floppy disk. The Z-80 C compiler was produced by BSD Software, which stood for "Brain-Damaged Software". It was so named because they didn't support floating point math, but that was ok because we could get by with various tricks and get done what we needed to do.
http://amigan.1emu.net/aw/not30.txt
110 LET A=1
120 LET B=0
130 LET S=B
140 FOR I=B TO 19
150 PRINT AT 9,I;"g" (graphics G)
160 PRINT AT 10,I;"a" (graphics A)
170 NEXT I
180 PRINT AT A,B;" " (space)
190 LET B=B+1
200 IF B<22 THEN GOTO 240
210 LET A=A+1
220 PRINT AT S,B-1;" " (space)
230 LET B=0
240 PRINT AT A,B;">"
250 IF A=9 AND B=19 THEN STOP
260 PRINT AT A,B+1;
270 IF PEEK(PEEK 16398+256*PEEK 16399)=137 THEN STOP
280 IF S=0 THEN GOTO 400
290 PRINT AT S,B-1;" " (space)
300 IF S=9 THEN GOTO 340
310 LET S=S+1
320 PRINT AT S,B;"3" (graphics 3)
330 GOTO 180
340 LET S=0
400 IF INKEY$="F" THEN LET S=A
405 GOTO 180
Later I got more serious and wrote programs to do my math homework for me. I found that I learned more about the math I was learning by writing these programs than by actually doing the homework myself. That's been one of the reasons to get into education to pursue the idea of using programming as a learning tool (as pioneered by, among others, Seymour Papert [logo] and later Andrea diSessa [boxer]).
When I started studying computer science my programming "career" started in earnest. From doing some shady braininess when the internet was young to writing scientific prototypes.
Ever since I started programming it has been part of my daily life. I often find myself automatic tasks in my personal and professional life and I would like everyone to be able to do the same. Time and time again I have been confronted with people that do not (want to) understand computers or their place in our (future) society and keep on serving the machine instead of having their machine serve them.
All and all, I've been programming machines for over 20 years, ever since my early teens.
At 60 years old, I look back on a long career of programming - with the most exciting work coming late in life as a founder of a tech startup - Android, websockets, semantic web, natural language processing, and programmable web. Its just great! I wonder what the next couple of decades will bring ...
ZX Spectrum was the shit though, as a kid. It had everything you wanted: BEEP command to make tones (so you could make music!) and user-definable 8x8 characters [3]. I remember sitting down with graph paper, drawing a grid of 8x8 spaces, outlining something neat like a helicopter, then tracing out the pixels. Then it was trivial to just "PRINT" your custom characters and make things move around.
1 - http://en.wikipedia.org/wiki/MSX 2 - http://www.interface1.net/zx/clones/hobbit.html 3 - http://www.worldofspectrum.org/ZXBasicManual/zxmanchap14.htm...
Almost as traumatic as when she dismantled my Lego Technic car with working gearbox to dust it.
Add the two, and scaling meant buying another TV and migrating often between rooms.
Traumatic was when I (think I was the one who) finally burned it by plugging in the wrong power supply, decades later.
The machine had a 3" (sic) diskette drive. Unfortunately, the 3.5" diskette made the race and became predominate. 3" was prohibitively expensive within short order.
My case:
Got it when in sixth grade. Used to wonder what sin and cos functions were (having not studied trigonometry as yet) :-) Managed to figure coordinate geometry out though to create shapes on the screen.
This was the best gift my father ever gave to me. Around seventh grade, I was imagining 3D animated movies. Tried hard to figure an equation that would describe a human face, so I won't have to compose it from geometrical primitives! :-)
Tenth grade, I was programming in machine code (no assembler, converted mnemonics to machine code by hand!). Imagined a compiler (was not aware of them preexisting) and made a simple prototype that converted post-fix expressions to machine code. My last bit was to finally manage to create a 3D animation, as big as I could fit into the available memory (<48K max), precomputed with BASIC and cycled on the screen using machine code.
My biggest loss here was not having any non-volatile storage whatsoever. Used to write down finished programs back into my notebook! Could never build on the top of software I had already written once...
I still have the machine with me in my home country, though haven't touched it in years!
Lived in SQL Server from when it was hard to differentiate from Sybase / OS/2. Did anyone ever have the problem that if you unplugged the monitor on an Sybase / OS/2 machine the whole box would crash?
In the mid-90's, the saving grace for us with VBIII / SQL Server was a small, self-published (at the time) book, Hitchhiker's guide to SQL Server, by Bill Vaughn. Actually went to dinner once with the guy- He flew helicopters in Vietnam on SAR missions... give him a couple of drinks and he'll tell some -very- interesting stories.
Three very cool years 2003-2005 creating games using Torque and GameStudio to host educational content (an FPS, hosting .avi's instead of shooting), then the C# .Net world on the desktop and the web. A little Python and Pearl thrown in for fun.
I'm lucky that I'm the go-to guy for weird requests. Keeps the job interesting.
I didn't have a multiprocessing platform until 1988 (4.3BSD at college). I wonder how much better I'd be now if I could have gotten my hands on OS-9 earlier.
My dad helped me double the ram by piggybacking chips on the existing ones. I used to take the cover off and stare at motherboard along with printed schematics to understand how the thing worked.
I think it's a lot harder for kids to get the kind of basis for things now.
I fell in love. I remember we worked with Netlogo and Scheme. We learned about towers of hanoi, various search algorithms, dynamic programming, cellular automata, disease spreading simulations, lots of recursion, prisoner's dilemma and many other things. I remember implementing a calculator in Scheme and writing a billiards game in Netlogo as projects. People did lots of awesome projects and it was an inspiring time and place to be.
I've been programming ever since and I was very very lucky to have the option to try it out in the first place. There's a real need to bring that option to more people, and I've been thinking lately about how I can do that.
Later: Python (Pylons), PostgreSQL, Java Servlets, Jersey, Play Framework, Jackson (in roughly that order, omitting a lot of detail).
Only ever had a mentor who taught me new things once, when learning the servlets stuff. The rest of the time, I had no mentorship :(.
EDIT: Oh, and back before there were any online resources. You got the manual and thats it.
From that I progressed to an original IBM PC AT (still got the Model M keyboard from it), using QuickBASIC at first, then QuickC. Then my Dad got a 486sx20 with a stratospheric 16mb of ram. Kept going with the C and some assembler on DOS, messed around with OS/2 2.1 and REXX as well, and then got Slackware Linux 2.1 in 1994. I messed around with all sorts - C, lisp, x86 assembler, C++, shell scripts.
I've programmed professionally, using Delphi, Java, C++, Perl, Python and C#, for 15 years.
I started writing programs when I was 14, on a commodore pet that I found in my school.
Professionally? I wrote a little software during my master thesis time. This is kind of professional, but it was not the main objective. I did the same during my phd time (physics). It was not before 1 year after my phd, that I earned my money with software. Nowadays, my primary work is developing software, although I am a scientist.
So the answer would be:
30+ years, when I count my first programs
20+ years when I count from my first professional programs
10+ years when I count from working professionally and full time on software
I voted 10+, but I suggest, you restart the poll with a more precise question. (scientists can be a nuisance, aren't they?)
Soon after, he handed me a book that taught assembler programming by directing the read to hand execute instructions in the corner of each page, flipping pages to find the next.
A couple dialup terminals later, we assembled a ZX-80 kit. 1KB RAM. Built a sound card from scratch for it.
Long story short, 20+ years as a developer and teach programming part time. That today's students start with high level 3D GUIs and gigabit networking makes it hard to drag them back to the binary basics and build from there.
[1] I would have started six years earlier in high school. But a (probably) well-meaning guidance counselor convinced methat I needed trigonometry or something to even begin thinking about programming a computer. So I took the basic 'intro to programming' class offered in 1983 at my high school and dropped the whole business.
Pity - I really _liked_ messing around with those Apples.
Early on, I didn't realise that you could retype lines to replace them, so was careful to type them out 100% accurately. One time a "friend" came and mashed the keys when I was on line 1300 or so, earning him detention for a week from the headmaster who was also none the wiser!
I haven't really worked on any big projects, just little bits and pieces here and there. I just set up a github a couple months ago, and the only thing on it is some mIRC script that isn't really being updated anymore.
Kinda hesitate to call myself a programmer, feeling like that term is best used for people who do it for a living or have a great deal more experience than I do. Coder or scripter is probably more accurate :)
This was before the Internet was easily accessible. Software shipped with manuals that made the bible look tiny.
Then I discovered girls and skateboarding and booze and didn't touch a computer for a long time.
Around 22 I started with HTML to make a site for Tony Hawk's Pro Skater cheat codes. It kinda snowballed from there. That was still when Clinton was President.
Now I focus on PHP and scaling servers. I have a Bachelors in Economics but enjoy nerdy stuff more.
Still so much to learn ;)
Later around 2000 I moved fulltime to Linux, I started learning C better, tried C++ and didn't like it that much, tried Objective-C and loved it, but Objective-C was very much useless at that time for me, in the end I got around C++ fine, learned C# and finally moved to Python, my language of choice, but I still dabble in C++, Java and other languages.
In high school i was very active with several local BBSes in the san gabriel valley and learned a lot from people i met there. When mosaic came out, building web sites was such a no brainer natural fit, I took to it immediately and have been doing it inside and out, one way or another since then.
It was in BASIC, on a Data General Nova Eclipse. Upgraded to assembly about 6 weeks later, just because it was insanely fascinating. (Hey, I was in 8th grade or so. Nobody breathing down my neck to actually produce useful things)
First program? Simulate rolling the dice 200 times. We had to do that for homework, and like every self-respecting programmer, I'd rather spend 2 hours automating a task than 30 minutes doing it by hand. (Followed by 10 hours of tinkering so it makes nice output ;)
(Waiting for someone to go: "I am a direct descendant of Ada Lovelace, now get off my lawn")
I would hang out with my dad in his office, and that's when i first saw computers. Later on, i was exposed to Foxpro programs in high school and two semesters of C in freshman year. But i was too busy fooling around with my buddies to take notice. I was studying EE, so din't really get much programming practice except for some Matlab.
It was only toward my third year in college when i sensed that having good programming skills might be useful. That's when i started doing some project Euler problems. My final year project involved an embedded networked application, and that's when got to know about GCC, linux and the open source world.
I am now a programmer in a research lab, and my masters thesis involves building machine learning models for an underwater acoustic communication system.
My father was the "it guy" for a swiss engineering firm in sweden, lots of *nix and vms stuff.
had the vic 20, then c64, then amiga, then 386, 486 and onwards at home, I was probably 6-7 years old when I started playing. Like another poster higher up, had to learn binary pretty fast to make rasters and sprites etc. lots of fun over the years.
But, in reply to your question, yes, I am 2nd generation, something I actually liked to point out in interviews early in my career.
War - what a catastrophic waste of young minds and bodies.
On a positive note, my son, at 15 months, has already earned himself the nickname "Little Schemer"...
I'm 40. My grandfather, when he was young, even if he did almost no programming, was a leader in the introduction of computing in press in US and later in France.
But I first learned to "code" back in 1987 on a Tandy color computer my grandfather bought me, and continued to tinker randomly for the next 15 years. So if you count that, my programming started over 20 years ago. Moved through basic, pascal, c, c++, visual basic, java, .net, php, PERL, ruby...
God damn, when did I become so old?
Years since I first started coding isn't very indicative of my skill level, but years I've been coding professionally (ie, zero) probably understates things too.
Sometimes I still think of VB, though it’s been a decade since I wrote any — especially with certain Chinese foods. DIM SUM NICE FOODS, reads the storefront. Yes, I think. But dim sumNiceFoods as what?
I started really young so programming was never scary to me. It was just like a slower version of drawing or cooking. i.e. you're making something but it takes a long time to do the code "recipe" to get the ultimate result. ... It also didn't help that the only way to save your programs was to play them to audio cassette...
My first larger program was "Towers of Hanoi" where I "solved" the algorithm on my own for. Still the programming I'm most proud of.
My computer progression: TRS-80 pocket computer, TRS-80 model I, Commodore 64, Commodore 128, Commodore +4, Amiga, Vic-20, and then the long list of Intel 80x86 machines and phone/tablet gadgets.
Turns out, writing them was much more interesting than playing them ever was.
I guess 10+ is an honest vote.
myself , started when I was 14 , got paid to program when I was 16 , closing to 30 years of programming , this year
It was fun to learn assembler entered directly as binary :P
It all started with programmable calculators...
Forgot to mention: got support via a BBS that was hosted by the local school district, ah SEDNet.
I can't begin to imagine working on larger programs using it. Discovering Q-BASIC and especially Pascal (and Borland's editor) was the transition between crafting my programs on paper to punch into the computer and crafting them on the computer.
Sad truth: I think that, until I got my TI, I was a normal well-adjusted kid. After the TI: I'm certain I wasn't.
10 Print "Jeff" 20 Goto 10
Earning my living with computers for about 22 years now.
~1985 - Basic on Sinclair ZX Spectrum 48K
~1990 - GFA Basic on Atari ST
~1992 - Turbo Pascal on PC
1994-1998 - Scheme and C++ at university
1998-now - Professional programmer in C++, C and PythonI am wondering if this is due to people leaving the field or companies not wanting to hirer older developers?
Now I'm 31. So yeah, I've been doing this for 20 years.
Started out on an XT (I think) writing Basic. It's been 20 fascinating years.
I quickly progressed to writing QBasic programs on paper, reading through some textbooks my parents borrowed from the local University library. From there I purchased a copy of `Computer Programming for Dummies' and started programming simple programs in the shareware version of Liberty BASIC [0] -- do you know how _frustrating_ it is to be limited to (IIRC) 100 lines of code?
From there, I taught myself C and C++ (via the a Dietel & Dietel textbook on the subject) and Python via another textbook that I don't recall the title for. I started programming games in DJGPP/RHIDE, and grabbed a copy of Michael Abrash's Graphics Programming Black Book that I never understood for the next five years or so . . .
I learned some basic concepts of data structures when I was twelve or so . . . around then I implemented my first binary tree. I'd been writing hash tables/linked lists before then, but never realized that it was a pattern. Just me reinventing the wheel as usual . . .
When I was fourteen I finally got my act together and wrote a simple card game for the OLPC XO, my first open source program. I doubt it's still around, but it worked! Crazy Eights goodness . . . my first Python program that reached more than 150 lines -- as I recall it topped out at about 750 or so. Not terrific, but it was an accomplishment.
I moved on to more theoretical topics after that; I spent the next year or so teaching myself how to write a recursive descent parser and write an interpreter. I learned quite a bit about trees and CS theory from that, to be honest! I can recommend the process to anyone who's interested -- writing an interpreter, including the parser, from scratch is _definitely_ one of the better things that's happened to me. That project, topping off at about 2,250 lines of C++, also taught me something incredibly important: the importance of designing something properly. My first introduction to software engineering, I guess.
I spent the next while tinkering with random things, until I started my next major project, Aesalon, a month or two before my sixteenth birthday. I worked on it for the next eight months or so, and it topped off at about 17,000 lines of C++ before I started rewriting it.
Aesalon is actually, IMO, a pretty impressive project -- it's definitely one that I'd hesitate about starting nowadays. It was originally a dynamic memory watcher, using binary injection to insert some profiling code before and after each call to `malloc`, `free`, `realloc`, and `calloc`. It definitely taught me a lot about how Linux loads and executes programs; I ended up essentially writing the backend for a debugger (including break/watchpoints, reading the symbol table, parsing ELF headers, the whole shebang) and even wrote my own Qt graphics canvas (the stock Qt graphics canvas doesn't work very well past 100,000 objects, and I needed to display 1,000,000 . . .)
It was also an education in software engineering. Designing a system of that scale taught me a lot; I reinvented the observer design pattern, the visitor pattern, and about five others. I had to deal with pool memory allocators, ugly codebases (all my own fault), refactoring, and APIs. It's definitely the biggest project I've ever written, and I'm still working on a rewrite of it; the project page is up at [1] if you're interested.
I'm eighteen now, just finishing up my second year of University (studying computer science and mathematics), and . . . it's scary to realize that I've been programming for more than half my life. Longer than some people around me have been doing long division for.
Anyhow, thanks for the trip down memory lane. I haven't revisited a lot of that in a while.
Happy hacking!
This is incredibly awesome! At age 12, I probably didn't even know what programming entailed.
I really wish I did though.
It must be like a month since I last programmed, and even then it was just a little ProjectEuler.Net
I need to get my hands dirty again, I'm losing touch.
Though, I've got a lot less time to focus on it now, with all sorts of other worldly responsibilities.
Still have some of the green bar paper with the logon headers.
EDIT: oops seems it must have been a 16K model.
As a hobby, ten years this summer (or early fall). Full time professionally?
4 months and 2 days.
~1982 - Basic and TMS9900 Assembler on TI99/4A
~1985 - C, C++ and Pascal on Amiga 1000
Nowadays, mostly C++ and Python
a=10 a=a+1 print a goto 10
i grew up a computer wunderkind, and now have gray hairs in my beard. it's hard to be an old wunderkind, but giving endless shit to the new wunderkinds sort of makes up for it.
i've been saying this for the last 10 years.
Commodore computers played a huge part in raising me.
20 GOTO 10