How did you learn to program?


#1

I’m curious to hear people’s stories on how they came to learn about programming software. There’s people from all levels here, and I’m really impressed/confused by a lot of the people who know a lot more than me.

I’ve learned all on my own, first from my interest in Max, then getting into Processing and now SuperCollider. I have brief moments where I consider getting formal education, but I already have a four year degree and don’t have any desire to put myself into more debt. Also, I still haven’t figured out if I’m really into ‘programming software’ in the abstract, I say in the abstract because I’ve done next to no programming that doesn’t relate to music or visuals.

So I hope people are willing to share their stories and thank you!


#2

i don’t remember when i first became interested in programming, and there were no computers around when i grew up. as a matter of fact i didn’t really have access to any computers until my first year at a university (studying computer science). so i would just read about programming (a book on assembler was one of my favourite reads!) and write programs on paper. then finally my brother gave me his programming calculator when i was around 12, and that was the first time i was able to program a real device :slight_smile: in some ways coding module firmware means being able to bring back that initial immediacy and excitement…


#3

After having a false start trying to teach myself Flash, I remember coming across this book called “Flash Math Creativity” in the very early aughts, which had these really nice layouts of generative images alongside the code that was used to create them. It introduced me the the world of using programming to make interactive graphics and while I had only the most cursory understanding of ActionScript (the language used to program in Flash), I knew that I had to learn it and the examples in that book felt like codexes for me to decipher.

image

image

A couple years later, the first alpha version of Processing came out and participating in the community that formed around it was a really big formative programming experience for me.


#4

I grew up with it, sort of. I had an Apple IIc, which most other kids had. I wrote little programs in BASIC. There were games and somehow I got the source code and started making random hacks, like in a driving game, allowing a car to drive off the road and immediately wrap around to the other side of the road.

I showed this to someone at school who was very unimpressed. He told me, I should learn 6502 assembler and let me borrow a book. Whatever I did was a complete hack, i maybe “thought” I used subroutines but didn’t really get how to use a stack or anything a real programmer would do.

I wrote a program to sonify the memory by mapping the byte value to pitch of the speaker (basically a 1-bit oscillator). You could learn where there were interesting things in memory, then go write things to that memory and see what happened (nothing in those days was write protected). It might make the screen display all sorts of random crap or the disk drive lights go on etc. You just never knew. There was a sort of Internet then, though mostly BBS’s, but I couldn’t access any of that and so just tried random stuff. Then i got obsessed with plotting lissajous patterns and all kinds of plane curves.

The other thing that was cool is the BASIC program was stored at a fixed location, so you could use BASIC to write values into those locations and hence write self-modifying programs. I didn’t do anything creative except figure out how to hide source code but have it slowly reveal itself each time the program was run.

In college I immediately took a programming class, it was the first year they taught it in C++. You got an account on the Sun workstations one of which had a color display. Only people in the class, or CS majors had this account. Otherwise you suffered with green (VT220) terminals or PCs which were all physically networked (wired) in a ring so if someone tripped the connection the whole lab would lose access, people couldn’t write to the servers and you’d lose your work. There were also networked games, there was this tank game “XTank” and it was really cool playing with people 3000 miles away after midnight on a weekend. Either that or get drunk and enact live action role-playing games with swords made of duct tape. Or explore steam tunnels, or sometimes all three. This was in 1991 or thereabouts.

After that I never got serious about it, except when I needed it for work or for my studies. Now it seems what I spend most of my time doing and everything is of course highly structured and methodical. Even stuff with Max or Processing gets that way.

I enjoyed most the hacking of the earliest days. Especially the self-modifying programs.


#5

I learned BASIC on a TRS-80 in my teens, entirely self-taught, with the mutual assistance of various friends who were also learning. First this meant spending vast amounts of time at the Radio Shack that was walking distance (a little under a mile) from the house I grew up in. Eventually it meant spending way too much time in my bedroom using my own TRS-80 and its accompanying tape cassette drive to store programs I was working on. I entered college a few years later with a floppy disk drive and the plans to double-major in English and computer science. Comp sci proved way beyond my abilities pretty quickly, especially because of my attempt to do it alongside another major. I studied so hard for both those majors I ended up in the hospital with malnutrition toward the end of my first semester. (There was a strike by a lot of the student services on my campus my freshman year, so we were left to fend for ourselves food-wise. I’m guessing that if the cafeteria had been running I would have eaten better and not ended up in the hospital.) Anyhow, I didn’t drop comp sci immediately, after struggling through C, and APL, and some other languages, and learning to write compilers from scratch. I first took linear algebra, which would have counted toward the major, but eventually I acknowledged I wasn’t cut out for it. (Fun fact: one of my professors was Alan Perlis, who won the first A.M. Turing Award.) I even took a summer job after freshman year programming for a division of an aerospace company, but when I got back to school for sophomore year I knew I was done with comp sci. In part this was due to my having joined a music-journalism magazine on campus, and that was taking up a lot of my time, as was DJing and eventually helping to run a concert venue on campus. I haven’t programmed since, but I have been planning on picking it back up. I’ve been working through a Processing instruction manual lately. We’ll see how that goes.


#6

I went to an engineering school focused on computer science, where I technically learned programming (I also had a few classes in university before) but I actually started to do proper programming when I started working. And I have to admit that my code for the first few years would probably make me scream in terror/shame/anguish now ;). I work in video games and when I started I was doing AI R&D for games, which wasn’t always directly applied to shipping projects, so there was somehow less incentive for my code to be all nice and clean and efficient.

Overall, I think you do need to know the basic concepts and understand how they relate to each other and after that it’s experience, experience, experience. What does make a huge difference and is something you should get when it’s your day job (not always the case, though) is having other people working with you, talking about how you plan to implement things, looking at your code and giving you advice.


#7

can’t or don’t or won’t


#8

I grew up with it, sort of. I had an Apple IIc, which most other kids had. I wrote little programs in BASIC

Waaaat?! Me too!! (well sorta: i had an AppleIIe but ya, wrote little visual programs in BASIC… i can still remember the type of code, real simple with HPLOT x,y TO x,y to draw lines in different colors, until i tried sound-stuff with POKE and PEEK and just couldn’t understand at that age how sound was represented digitally in samples to make a waveform(“waaat?! sound comes in waves?!!” :sob:), then i gave up, figuring “why would i wanna make music with computers anyways” :baby_bottle: :baby: and went back to playing guitar and piano)

I never stuck on a computer-science track in any way; went into music-composition in college, failed out until, during academic suspension, i started DJing drum n’ bass and went back to school with renewed interest in ‘computer music’… from there, got exposed to CSound and SuperCollider and eventually those led me to coding Max/MSP externals in C.
But it was Tom Erbe ( http://musicweb.ucsd.edu/people/people.php?cmd=fm_music_directory_detail&query_Full_Name=+Tom+Erbe&query_Active_Status=Faculty )
in grad school who gave me the push i really needed:
He taught a course in coding Max/MSP and/or PD externals in C which focused on DSP at CalArts. I wanted to create a granulator/stutter-cut thingie(something that could cut buffer~ed audio into little segments no matter how short or long, be sample-accurate, and take care of clicks/pops… ideal for one-shot or… looping :blush: think: ‘the roots of karma~’ :raised_hands: :joy_cat: )… he and i were a little concerned the project was a bit complex for my level at first, but i figured it out: i discovered instead of calculating a full hanning-window for the amp-env of each grain, i could just do the attack, and then use that in reverse for the release… he thought that was really good that i figured that out on my own, ‘developers use many techniques like that to be efficient’… That was a really small discovery i made in comparison to the efficiency tricks and techniques seasoned coders use, but it was a big enough win to get my interest peaked in a way that would finally last, mainly because of his encouragement.
THANKS, TOM ERBE :place_of_worship:
From there, i felt really confident about coding(even though, to this day, i still really suck at it :laughing: :sob: :laughing: :see_no_evil: ).

But i really write all the above to provide example in support of this:

Indeed, debt is no joke, and times are changing(coding education is available in various forms, on the web or in physical schools, anywhere between free and stupid-costly)… i’d advise taking your time in making that decision, don’t do it unless you’re absolutely sure that’s what you want(programming involves a certain kind of patterned-thinking… patterning certain kinds of thinking can be extremely toxic if you’re not the type of personality who would hold passion for that pattern while remaining calm enough not to identify too much with it… hard to explain… but i write from a weird kind of traumatic experience :crazy_face: ).


#9

I’m not sure I’d put learning programming in the past tense for me yet, but I’ve been hacking away at it (pun 100% intended) off and on for the past couple of years, and can definitely relate to OP’s relationship to it. No formal education, just an itch I always wanted to scratch and could never quite scratch enough it seems…

I’m a formally trained musician through and through, and like OP would hate to take on more debt to study formally (especially after the cost of music college). Also, it’s not so much that I’m thinking about a career change – it’s more that I’m looking at programming as my next step as an artist, just following my nose, so to speak, and whether or not it feeds my income in any way isn’t a huge consideration. Though, I admit that knowing that I now have a skill that’s actually marketable is pretty cool! :slight_smile:

It started by developing an interest in Linux for some reason. I’m not sure how or why. But I just thought the whole idea of Linux was unbelievably cool, and despite its massive adoption in so many areas over the past couple decades, I immediately realized that its potential had only begun to be tapped. Naturally, liking the idea of putting together my own OS led to wondering how an OS is put together in the first place…i.e. code.

At the same time, I suppose I naturally fall into the roll of a programmer since I’m lazy – by which I mean that if it can be automated, it’s a crime to not automate it. I’m a game/film composer primarily, and the amount of things in the pipeline that can screw up and waste unnecessary time is ridiculous, so I’ve gotten in the habit of automating a lot of the more dry/boring parts of my workflow, first with training wheels like OS X’s Automator, eventually leading to scripting languages such as Python and Javascript. It was messy and piecemeal for like a year, and honestly it still sort of is, but I actually like learning in such an organic way, driven mostly by need. It’s fun, and creative in its own right. You pick up a lot of interesting things when you allow yourself to tumble down a rabbit hole.

Now I’m living pretty deep in Max world, and as soon as some projects are finished up, I’m going to tackle C++ in a serious way. Screw building your standard EQ that tries to sound like a piece of hardware that already exists – I’m way more interesting in processing audio in ways no one’s ever thought of!

Maybe the best thing I’ve learned about programming is that the language really, really doesn’t matter, and the more languages you know, the easier it becomes to pick up another. It’s like learning scales or modes or something – it’s just a way of organizing concepts and achieving certain results. There’s more than one path to the top of the mountain, and as such there’s more than one programming language, but also most paths (and also languages) have a whole bunch in common.

For me it all just comes down to the fun of trying to solve a problem. It’s much closer to creating “art” (whatever that word means) than people generally give it credit for. In fact, I’m not convinced they’re at all separate…maybe programmers and the like are just artists that somehow convinced the world they needed to be paid!


#10

When I was about 13 I thought that mechanical things, like mechanical calculators and simple electrical circuits were fascinating. Mind you, this was in the 70s, long before “personal computers” even existed. I learned that my upstairs neighbor, who did babysitting for, was a programmer, and I asked her if she had any books on computers I could read. She brought a giant volume: “The IBM Self-Paced Instruction Cours in COBOL”. The first few chapters described the basic ideas of computers, and then went on to programming… I must have read it every spare moment. Soon, she brought me flow-charting paper and a template, and punch card coding forms from work. A week later I wrote my first program, and she had it keypunched and run at work… That’s how I started…


#11

I started around 1980 with a TI 99-4A. I was a kid but me and my dad went to the local computer user group meetings at the library and picked up cassettes with games and programs and lessons from other members. I didn’t reall grasp much about the language and eventually spent most of my time playing games like Hunt the Wumpus.

I finished college before PCs and the internet hit so didn’t get a degree in computer sci.

After college I started playing around with QBasic and later, because I learned that Douglas Adams loved it, AppleScript (which was a mistake). I began buying a lot of books on languages and dipping my toe into a lot of stuff but everything was just learning at home.

Eventually I decided to go back to school and have been a full time software developer since. I mostly work in c# now and vb when legacy things need attention.

I’ve worked in many languages and have preferences but with most languages, my experience has been that it doesn’t take long to pick up syntax and start doing something, but learning the framework can take years. Golang might be a bit of fresh air if they can keep the language small… have only dabbled so far.

If you’re looking for advice… If you’re doing this for fun, then keep it fun. Work with any language that lets you control what you want to play with. If it’s modular and music, find familiar environments and tools that support coding and go from there. I haven’t done much reading about music Languages yet but have seen Max teletype and monome pop up pretty frequently. I’m definitely interested in exploring those at some point, but not too interested in sitting at my laptop all night after coding all day.

@Andrew_Sblendorio, what environments, utilities do you want to control? Of the work you’ve done on your own already, what’s been the most enjoyable and fun to work with? Do you want to focus on music in general, or modular, or max…other? Do you want to change careers or is programming for personal enjoyment only?


#12

I still love the semantics here. POKE is writing to a location in memory, but the effect is to make the machine do things (click the speaker, display a color on the screen). You’re poking at a strange body and making it dance. You’re bringing forth things you didn’t know it could do (e.g. mixing colors by rapidly flickering between color, for machines with just a few colors… Doesn’t really work that well, but leads to a new kind of effect). PEEK means reading a memory location, but also: uncovering a secret. PEEK evokes an intimacy with the here and now, with the specific thing you’re trying to discover, with what that body can do.

Turing machines have no bodies and they won’t reveal their secrets (do programs halt?) Even the infinite tape must be thought of in the abstract. It’s all “mind” - the provably correct algorithm, the perfectly abstract, infinitely portable idea that must run the same everywhere, on iOS, Android, desktops, cars.

We’re trying to do AI with this and yet the most fundamental thing in human intelligence is, I’m a body, in a space, I perceive some way I can act (like sit down in a chair) – only within this structure do things appear that can be cognized. Or consider the “double law” of motor habits (like playing a violin) – the more that the action becomes skillfully articulated through the body, the less the conscious mind must attend to it, and can open up to other things, for instance inspiration. Yet we blindly forge ahead with the fallacy of Cartesian body/mind dualism and base the entire practice of coding (generality, portability, hardware-independence) on the disembodied mind.

Hacking may have been superseded by coding. But hacking is the means by which we uncover the essence of coding. The means by which we question it, and challenge it to evolve. We need it now more than ever.


#13

When I was six, I had an older friend with a C64 and the Shoot-'Em-Up Construction Kit cassette, and everything sort of followed from that.


#15

I got my first intro to programming in high school, where I learnt Pascal on an Apple IIe. I stepped up to more serious programming in university (maths/physics degree), where C was taught to first year students on a PDP-11. I continued programming in C & Perl while in college and through my PhD studies (astronomy). I really learned to code (& debug code) in a serious manner during my first job in Sun Microsystems, where I was working with a huge body of code (millions of lines in the case of OpenOffice). These days, I’m no longer in a software development role, and I mainly write small amounts of python & SQL to solve specific business (reinsurance) analyses.


#16

I attended this very left wing coding bootcamp in 2016 and doing so has been the most impactful decision I’ve ever made. It’s totally changed my career, circle of friends, city of residence etc.

I’ve realised that I’m far more interested in programming for it’s own sake, than in using it to create things. This has led me to learn Haskell, and fill my brains with esoterica. This is totally different from how I approach almost every other subject, and I’m curious what it is about programming that makes me so much interested in the process than the result.

Programming is very empowering. Whilst I regret not learning when younger, or doing a CS degree, I’m extremely grateful to have the skill now.


#17

I love reading all these vastly different adventures into development. Especially the reasons for doing so!

My first taste was programming an Arduino in high school back in 2010. That was also the year I got my first synth: a Korg R3. I had the feeling that I really wanted to understand both the hardware and software of musical devices, and discovering Monome played a big part in my attraction to creative software and hardware.

Long story short, I decided to study EE at Utah State University, but quickly started being drawn more towards CS as I felt like I could be involved in all of my interests, not just music, but anything I wanted really. Security and privacy was a big reason to get involved with CS and I hoped I’d be able to make an impact somewhere.

After a few year hiatus from school for some personal rollercoasting, I started delving into learning C and Python. Fast forward, and after narrowing down my goals, I decided to go to a dev boot camp for a few months coding all day everyday in Swift for iOS apps. I got an internship followed by a job writing in Swift, and I’ve been building iOS apps for the past couple years now actually. Trying to get back into C and picking up Kotlin currently.

As far as returning to my initial interest in software development with music, I’m building/refining some synth apps for iPad. And really starting to try my hand at deeper MaxMSP work. Would love to build some Monome/Arc apps. Maybe delv into some light firmware modding for meadowphysics this year? :wink:


#18

I started with BASIC in 1994, just as a curious kid mucking around. My family’s first PC was a 1986 XT clone made in Taiwan (which still works reasonably well considering its age!!), and we had a thick book for learning BASIC. In 1995 we got a new PC and the internet, and I was amazed to find services where you could make your own web page. These eventually led me to learning HTML and a bit of JavaScript, and other things followed from there.

I chose to study software engineering at university as programming is what my brain is wired for. Just about everything else seemed either boring or too difficult. I can’t say I’ve turned it into an exciting career, but it means a lot more to me that I can apply the software skills in my personal life.


#19

I dabbled with Python, HTML and CSS on Codecademy in high school (when I was ~15), but didn’t really get properly interested in programming until I went to uni for Electronic Engineering, and did projects in C (wrote some code that improvised background jazz music for a restaurant - that was fun), Java, VHDL, Pure Data (made a couple synths for a project in first year, and did a voice synthesis project last year) and Matlab.

Now I’m doing an internship for a tech company writing VHDL (technically a hardware description language not a programming language) but occasionally scripting in python and stuff. Excited to see where it all takes me! One of my goals for the (hopefully near) future is to release something open source and try to give back to the whole DIY scene.


#20

I learned how to program on my ZX Spectrum in the mid 80s, but I don’t remember actually making anything apart from menu screens for games I wanted to write but didn’t know how.


#21

This is very interesting! Really curious what kinds of things you automate in terms of your composition/musical practice.