I avoided programming until I got Feynman’s “Computer Disease” through a dynamical systems class. With Julia and the Chirikov-Taylor map !
I may be a bit of an odd ball here because while I’ve always dabbled with PCs (mostly for gaming) throughout my whole life, it was not until the age of 27 that I learned my first scripting language (NetLogo for agent-based modeling in university) in depth and then at 29 I actually attempted to learn my first general programming language (Python) on my own during my job search. Sure, I’ve tried to understand some other languages multiple times over the course of my life but never knew where to start and which would best suit my needs. I’ve mostly been interested in the communities surrounding programming (first and foremost the broad FOSS community) and general paradigms behind it but never dared to learn and apply it myself because I was somewhat certain that “I’m just not the programming type of person”.
Take my early experience with math as an example: When I was younger, I somehow understood what was happening in math classes and enjoyed the logic and consistency behind it. But I basically never practiced any of it and so I got the impression that this field just isn’t my thing (and teachers told me the same either directly or through my grades). In the end I even had to repeat a year in school because of that and somehow the connection between math and programming was deeply engrained in my brain - and all of that was holding me back from even trying it out.
Fast forward to my master’s programme in university a few years back where I had the opportunity to learn a new method. I quickly realised that programming an agent-based models requires a lot of the skills that I’ve previously learned from and applied to video gaming throughout my life: a deep understanding of complex interdependencies and human interactions inside a structured system of rules allowing for emergent patterns of behaviour and other phenomena. Lots of games provide their players with a similar playground as well and once I’ve experienced this light-bulb moment, my whole attitude towards programming has shifted.
I found great pleasure in outlining and thinking through model ideas, implementing them in code, refactoring everything, describing what is happening, searching docs and forums for solutions to similar problems, analysing the resulting data, cursing a whole lot because of obscure error messages that just meant I forgot to close some brackets somewhere, and so on. In short: I was hooked.
After I’ve fnished my master’s, I faced a longer period of searching for a job and with it came quite some free time. I’ve decided to further my programming knowledge and learn a new language that is more generally applicable, namely Python, while still being able to easily write the code in an intuitive way. Programming was a way for me to keep myself busy, to learn something new and practical and to finally delve deeper into the inner workings of computer programs that I’ve been using for years. One could sum that period up and say that in the end programming has helped me through some tough times.
Fast forward a bit and now I’m in a position where I can put all that to use by either applying my somewhat foundational understanding of programming to creating ABMs in Julia or by contributing back to the open source community that has given me so much over the past years. I’m very happy that I didn’t stick to my previous notion of “programming is for math geniuses”. I’ve realised that programming can be approached from many different directions, none of which is better or more pure than the other. And I will give my best to spread that understanding through my university teaching and through my general attitude.
I want to share my experience because it’s also a little different. I grew up without much access to computers at home. I’m in my 40’s and computers existed, but they were still fairly rare when I was a child. My first memory of computers comes from one of my cousins showing some software he was developing for his company, and all I remember are the green numbers on the screen. I played some at friends’ houses, and one friend in particular showed me how he was learning BASIC at his school, but nothing really got me interested.
I started to study biology in college and got interested in statistics. That meant I started spending more time on computers using SPSS. Still, no programming. But later I got exposed to scientific software that people wrote to solve one problem in particular. And you had to learn about using the terminal and open the script and things like that. During my MSc I went to London to work with one professor who wrote such software in the 80’s and dug it out of his office in these huge 5 1/4 inch disks (remember those?). I had to find an old computer that could still read those and found it in some basement at UCL, hooked to some physics experiment that had been running for like 20 years. I didn’t do any coding, but I helped my professor debug the software and learned some about code. I also got some Excel spreadsheet with macros that some colleague develop to help analyze some data I had.
Finally, PhD and I got a class using S and R go mentioned. I downloaded it and started playing. At some point my professor threw this important project at my desk and I taught myself to code macros in VBA in two weeks so my lab could present a poster with results at an evolution meeting. That was my first ever coding experience. After that, I started learning more R. Got some basic Python online courses. But at some point I saw that @dmbates had moved from R to julia and I got curious. I checked what it was, but still to scare to try (It was still like 0.3 I believe). I kept working on R, but starting lurking on the julia Discourse. I did a lot of R evangelization at my lab, since my school is the cradle of SAS and everyone uses it. When I finally left for my postdoc, decided to finally learn some julia (last days of 0.5 I think) and eventually did a project from start to finish in julia. And now I use it all the time.
I know I lack a lot of skills as a programmer and my packages are probably bloated and inefficient, but I do like the language. I do remember trying to look at the source code of a library in R and finding C++ (Rcpp) and feeling completely lost. But then I looked at a julia package and I could more or less follow the logic. It was revelatory. Now I preach the julia word and hope for a wider adoption.
I came to it slowly. BASIC in high school (on some donated TRS-80 IIIs if I recall correctly), Fortran in university, did fine with both but it wasn’t what I was most interested in (analog and power electronics) and I actively avoided it for a bit. But microcontrollers (assembly and C) and digital logic (Verilog) became necessary, and maybe even interesting. Then Python as a general purpose tool which I really enjoyed and used as my main tool for algorithm expression for nearly 20 years (with occasional dips into C as needed). Dabbled with a few other languages along the way to see what the fuss was about, but not until Julia did I find something I thought was just fundamentally better and well worth learning for the acceleration of thought it can give.
Not so different perhaps - I was 30 and had a PhD before I started coding. I did it because it was pretty obvious that biology was moving ever more towards big data - even people that are primarily experimentalists need some coding to work with sequencing datasets.
I thought that having a solid experimental background and computational chops would make me highly competitive, but now I’m not so sure. I’m now behind on experimental methods and way behind people that have been coding since undergrad. But I’m making it work - I think the education angle is my best bet - I can still remember what it was like not to know anything
I learned to program writing VSTs too! Synthesizers, samplers, pitch shifters and things. My first ever Fourier transform was to remove aliasing
It’s amazing how useful those skills are in biology, and how much of the math and coding transfers to writing modelling tools.
I got interested during my bachelor. I wanted to do linear and cubic regression without using Excel.
At the lab we were requested to fit some data, assess the validity and tell the errors. Usually it was done by hand, but it would take valuable time and be prone to errors. A friend told me how to do it in Excel but I was unable to do so. To do linear regression, you had to put your data in a predefined way and then do some button vodoo. Furthermore, it had nothing to do with the math that I had studied in class, and it was not clear to me how to extend it to do cubic regression. I just wanted to see how the results emanated from applying the equations to input data. Then I found a program in Fortran to do so that catched my attention. It was much more clear. Although my colleagues thought the contrary. Suddenly, I could make better usage of the computer than my partners. That experience instigated me to learn Fortran, later LaTeX to do a report, Python to glue code plus many more things. Besides, I had a phenomenal teacher that was a devote of Octave. When I needed I learned C++ to work in a project, and now use Julia to do some prototype numerical tests.
In 7th grade I wanted to implement a simulation of a thought experiment described by Martin Gardner in his “Mathematical Recreations” column in Scientific American. The thought experiment was called “Logic Creatures” (I unfortunately can’t find it anywhere online), which were these little rectangular critters with two “eyes” (i.e. light sensors) in the front and two wheels in the back. They had little neural networks of the classic threshold triggered variety (i.e. where each “neuron” computes a weighted sum of all its inputs and fires if and only if that value is above some threshold. The idea was you could design small simple networks connecting the inputs of the two eyes to the outputs of the two wheels. The input to each eye was the total amount of light hitting the sensor from lights in its environment. Each wheel spun with speed proportional to the total neural signal it received. By tweaking the neural network, you could program the creatures with various different behaviors. The hypothesis was that you could get complex and different behaviors with only a handful of neurons.
In the column, this was all worked out in theory but not implemented anywhere. I wanted to implement it as a computer program for my 7th grade science fair project. I realized pretty quickly though that since I didn’t know how to program (beyond a little bit of logo), this would not be doable by the time the science fair project was due. So I did some other project that year (surveying people to optimize the effectiveness of the cafe wall illusion). But over the summer, I read two books on programming: a book on Pascal and another book specifically about Borland Turbo Pascal for Windows (3.0 IIRC). By the following fall, I could program somewhat decently—enough to open a window and draw some stuff in it and handle some mouse clicks in the window. One of the first cool things I actually got working was was generating a Mandelbrot set—a classic first graphical program.
For the 8th grade science fair, I implemented a simulation of Martin Gardner’s logic creatures with a GUI interface that let you drag and drop light bulbs and creatures on a canvas, and then you could watch different types of creatures do their thing. I toyed around with a few different neural network designs for different types of creatures. There were the ones I called “cockroaches” because they scurried away from the light and hid in the corners. There were “flies” that went towards lights and then circled around them forever. There were also “meerkats” that rushed up to the nearest light and then stopped, facing towards the light, like meerkats basking in the sun. There are probably a few others, but those are the ones I remember.
At the time I had no idea at the time about double buffering when updating the contents of a Windows, so I remember that while the simulation worked, it was horribly flickery since I was erasing the graphics buffer in-place and then redrawing it on every time step. Oops.
It was a great learning experience. Obviously learning programming was a big part of that, but I also learned trigonometry in a very concrete way that demonstrated immediate value: you need all the trig functions to figure out how much light is hitting a sensor based on where it is and what direction it’s facing. The exposure to neural networks was pretty superficial, and I can’t say I took much away from that part. The other big lesson was that really complex behaviors can emerge from very simple systems.
Was that Dewdney’s computer recreations, which ran before Gardners mathematical recreations? COMPUTER RECREATIONS on JSTOR I remember those too!
It was a long time ago! I was in high school, and the school got a teletype, hooked up to a mainframe 150 miles away. I got an assignment to play a game and win for a biology class. The game was simple: you are a cell in the body, and you must survive. There were certain operations you could perform, like taking in food, getting rid of waste, stuff like that. But, no matter what I did, I died. So I cracked open some of the manuals, and got a program source listing, written in BASIC. From it, I gleaned exactly what amounts were added and subtracted during each operation. I was able to calculate a path thru the logic and finally completed the game alive.
I then thought of my own programs, and finished up the year by writing a redox equation solver that won the state programming contest. (and a whopping $50 grand prize!). It was pretty good, used Gaussian Elimination, and GCD to bring the numbers down. Added water and hydoxy automatically, etc.
Since then, I’ve learned lots of languages: Pascal, Modula, Fortran, Cobol, C, C++, PLI, Forth, Emacs Lisp, Commaon Lisp, a few assembly languages, and a dozen more on top of that, with Go, Julia, and Erlang, as my latest recreations. I went from writing emails via the usenet path finder (remember emails being sent system to system with !'s separating them?) , I got excited about DNS when it first came out, I programmed on VAX boxes, etc. etc. I’ve been at this for over 40 years, and still enjoy it.
murf
Wow, some really young starters here!
So, I kind of got into programming quite late (like, 2 years ago) . I have written about this elsewhere too but Julia helped me get into it.
I didn’t have any exposure to programming previously at all and was used to using canned tricks in R and Python. But I never had any deep understanding of what programming really is. What’s a type? Parametric types? Multiple dispatch? Run-time error? I used to write a lot of glue code because I didn’t understand the basics, and thought that programming was opaque to me, which I was bummed about because I was really into math and also good at it. And, I wanted to be good at programming because my work required it some.
Then, I found Julia. The first two weeks were a struggle. Oh man! Nothing would run properly. Working with my own IDE environment was daunting but I read a lot of docs and used stackoverflow when I got stuck. I think a lot of answers from discourse were crosslinked there, so I began checking discourse too. It became impressed upon me very early that Julia has really a few basic principles at work – avoid globals, write for loops, and perform in-place operations, if possible etc. I had a serious math background, and this style of programming struck as natural to me. No more vectorization for the sake of it. I can just write programs as ideas sequentially (pun, intended) popped into my mind.
One month in, I started becoming decent. Code ran much faster and while I was still getting stuck, for the first time in life I began enjoying programming. I started looking forward to reading Julia docs, keeping track of Julia updates, reading discourse, participating on it actively and even cracking some programming jokes with my CS friends! Eventually, I was hooked into programming and have been since.
An author once described reading a Nabakov novel by saying, “when you visit (the novel), it’s as if he has given you the best chair near the fire, the best wine, and his fullest attention”. Learning programming via Julia was something like that for me. I felt adequately challenged but never felt Julia developers were treating beginners like me on a whim by expecting us to memorize a lot of tricks! Hence, my goodwill continues towards Julia, and towards programming in general.
I started with C64 in 1985. I think I got my 386SX 1988 Christmas and maybe a year after I requested a programming book. Unfortunately, I got C++ book and it killed my enthusiasm for many years. I think I even asked another book and it was Turbo Pascal and that was the final strike to kill the joy of learning programming.
I started my studies 1998 and the first programming course for mechanical engineers was still Fortran 77. After that Matlab felt so easy and beautiful. Then I moved to Scilab and perl. Maybe Python learning started in 2008 and finally Julia from version 0.3.
Oh man, I think that must be the article! No wonder I wasn’t able to find it—I had the wrong author in my mind. The publication date lines up too. It’s wild to read it again after so long.
In 7th grade, about 1977 or 1978. I got a thin, flimsy, blue book (IIRC) on programming in BASIC, with crummy cartoon illustrations, like in a physicist’s monograph. I think a classmate told me about it. Soon after, an old copy of the Kemeny and Kurtz BASIC book from the 60s. I didn’t have access to a computer, so I wrote programs in a notebook. If I tried hard, I might recall something about the programs. But, not off the top of my head. I was really excited about it. After a while, (a year ?) I got access to a teletype 33 and a mainframe. The ribbon was usually old, it was barely legible. I got 101 BASIC computer games. I typed in programs, then flipped the lever and typed list
to write them to a paper tape. Carried them around in a paper bag. I don’t recall when, but eventually, I learned C, and some Fortran, perl 4, then a lot of perl 5, and Mathematica. About 12 years ago, I learned lisp and really got into that.
I tried learning Python a couple times in early high school (I think what would be middle school in most places that have it), but didn’t get far beyond the usual print "Hello, world!"
examples.
In my final year of high school (very small school) they offered a programming course for the first time ever, so I signed up. It was very cool, every two students got assigned a Lego Mindstorms robot kit and we were taught to program them with a little language called RobotC. I learned a lot in that course and had fun, but I wouldn’t say I was hooked on programming or very knowledgeable at the end (though I was pretty proud of doing well in the class).
Then I started my physics undergrad where I was taught some Matlab and learned a tiny bit of the scientific Python stack. Both languages were pretty meh for me. I developed a pretty elitist attitude that analytic, symbolic physics was the most ‘worthy’ and that numerics was beneath me. That attitude led me to become quite enamored with Mathematica, which I soon became convinced was the only language I’d ever need .
The summer following my final year of undergrad led to me doing a lot of random reading online and I started reading lots of wistful articles bemoaning the fact that Lisp never caught on and talking about what a wonderful, beautiful programming language it was. This caught my attention, and was probably the first time I ever got interested in a programming language for it’s own sake.
I learned a bit of Common Lisp, and spent a lot of time agonizing trying to figure out which Lisp I should really ‘invest’ in as a physicist, before stumbling upon some claims that Julia had most of the properties that people find so nice in Lisp but with a very scientific computing bent.
It didn’t take long for me to become hopelessly in love with the language and fascinated with tinkering with it. A younger me would have certainly been pretty surprised by this development.
My father worked for Burroughs and one day brought home a surplus C-7400 programmable calculator. It had a magnetic card reader/writer for storing programs and data. At the time I was interested in astronomy and programmed things like right ascension and declination to azimuth and elevation. This calculator didn’t have trig functions so of course I had to program those first.
Then I moved on to an Atari 800 programming in Basic and 6502 assembly. As an EE undergrad, our first language was Fortran 77. Then onto Pascal, C, Modula-2, Perl, Python… Julia.
My father worked in a medical research unit in Glasgow. They created what now would be called an expert system for gastrointestinal diagnosis. He worked with a wonderful man called Professor Wilfrid Card.
My father managed the PDP-11 which the unit used. I was allowed to come in as a small boy and learn to program in FORTRAN, using Prof Cards books. I think I was about 10
the unit had terminals rigged up in a room with a one way mirror. They found that people wer emore honest talking to the computer about GI symptoms, which can be embarassing.
Terminals - a screen and some large buttons rather than a keyboard.
Sweden around 1982: I was a middle-school level intern in my uncle’s office. They had nothing for me to do - but they had an ABC80 (a Swedish business-oriented computer) and a BASIC reference manual for me to play around with. Shortly after I remember turning around to a friend in math class and saying “I can make a computer count to 1000, want to see?”. Sadly the ABC80 was way too expensive for us, but one day my friend slammed a magazine on my desk with a full-page ad: “VIC-20, the computer with color and sound!”.
A year or two later an older kid called me over. He was trying to copy a hardware game cartridge called Spiders of Mars but it wasn’t working - the copy froze a second after starting gameplay. We assumed it was corrupted but when we ran a loop to check every byte of the machine code it was identical. We were stumped for an hour or so but then I had an epiphany and shouted “It’s a ROM, it’s a ROM!!” Turns out the game was overwriting itself. So we replaced every instance where it wrote to a location in its own memory bank and replaced them with NOPs (a pain since it did this in a dozen places using both direct and indirect addressing), and the game friggin’ worked. I rode that high for a week.
Sadly it was all downhill from there and I ended up stuck in the MATLAB swamp - until I was finally rescued by Julia.
I got interested when I was 13 and received a programmable calculator. I first programmed it to solve quadratic equations and statistic problems. I really liked the idea that a computer can do all the tedious mathematical operations for you without making any mistakes.
I was just fascinated by computers and electronics in general. I got started on a TRS 80 Color Computer III at 8 or 9 years old at home self taught. I just read the reference manual.