In 1987 there was a pop-science book called “Chaos” by James Gleick that was, naturally, about chaos theory. At one point it described things like Mandelbrot/Julia sets and their ilk. There was one page that had a footnote at the bottom that described the algorithm used to generate a Mandelbrot set.
I had a PCjr, which was an 8088. Very slow, EGA graphics. 256k RAM. I did have a 20Mb hard drive, though.
I wanted to verify that algorithm, though. So I bought some books on how to program in C from Waldenbooks. After not too long I managed write a program to draw a Mandelbrot set on my PCjr. It was incredibly slow: I watched it paint each pixel, and let it run for many hours before I would get a complete set. But after much trial and error, it worked.
I was 16 years old. It was the first thing I had ever done that I was really proud of.
Almost the same experience here; I have great nostalgia for that feeling, and the waiting for hours to finish. Nice to hear similar stories from someone else! I still have my copy of "Chaos", and it was (and still is) awesome, but another book I got around the same time was "Chaos, Fractals, and Dynamics", which included pseudocode, that I had to rewrite into Commodore-64 compatible BASIC.
I'd coded prior to this; I got my Commodore when I was like 11 (the family machine, but I used it by far the most). Mostly typing in games from magazines, but fractals were the first thing that felt like it was "computer science" - something that really explores a new space that just wouldn't be possible without a computer.
4th grade, way back in the mid-80's. There was a summer school program where they were offering to teach computers to kids on Apple IIe's. I remember it vividly... I'd wake up, get some cereal, watch some cartoons, then hop on my bike and ride down to the middle-school. There they had several Apple IIe's setup with their green screen monitors and a bunch of us kids. We were taught a little bit of BASIC and got to play with the Lemonade Stand game and then got to modify it. For some reason I just fell in love with that and getting to see my changes show up on the game. The following year, my parents bought a Commodore Plus/4 so my dad could do his masters degree. The Plus/4 was a crappy computer that had very few games (unlike the Commodore 64). So I used my experience with BASIC to write my own games. I learned how to debug and do the whole "trial and error" style programming. Been doing it ever since...
Similar experience here. My childhood friend bought a second-hand Atari 800XL, because it had cartridge games, and I begged him to borrow it for a week because I saw it accepted programs. Bought a cheap book called "Fred Aprende Informática" (Fred learns informatics) and had the best week of my life figuring BASIC out. It was painful to give it back, but that motivated me to save and buy one of my own.
Ironically, old computers/consoles were cheap then, I got most of them at bazaars for peanuts. If I knew mass-produced vintage hardware would become so expensive, I would have saved most of them. I can't imagine the same phenomenon with today's computers/consoles, everything is expensive and frail.
Not CS per se, but computers as a system. I couldn't care less about implementing a red-black tree, nor proving an algorithm's correctness by induction.
I start doing ops-y stuff around age 12, installing every flavor of Linux under the sun, breaking it, fixing it, and repeating. I figured out (and documented) how to get bizarrely specific pieces of hardware working in Gentoo, like an HP Photosmart PSC 2610 printer, or a Chaintech AV-710 sound card. I liked the challenge of tediously working through problems, reading system logs, overcoming the issues, and documenting a HOWTO.
I taught myself Python to automate annoying tasks at a job much later in life, and then discovered that automating things was a career field. Fast-forward a few years, I got an M.S. in SWE to kick-start my career shift, taught myself Docker, built a homelab, landed an SRE role, and was off to the races.
When my dad brought home a Commodore Pet 2001 in 1977, I was six years old. I figured out pretty quickly how to load and play some of the games from cassette. One game in particular, called "Dungeon" which was a pretty simple roguelike (although it actually pre-dates Rogue), I liked a lot. But the instant I figured out I could change the game by simply deleting lines of code, I was completely fascinated. Only deleting certain lines of code would work, others would make it not run. Why? How does all this work? Suddenly the game itself wasn't particularly interesting. I was hooked on figuring out the game behind the game. It didn't take long for me to start digging deeper and deeper into Computer Science.
I was in a band and we created our own website. There were a few problems around a PHP contact form and we all took turns trying to fix it. I realised that I was enjoying something that drove everyone else mad.
I was going to be an architecture major, right up until I realized my projects look terrible. The bunk beds next to the lecture rooms and how proud the prof was about them sold me on not doing that major. So I picked something that I liked doing. Noodling scripts and code. Lucky choice.
I did web development freelancing in high school but didn't want to be a "desk jockey" the rest of my life. So I studied Physics in college but gave up because I wasn't good enough at it and programming continued to pay well.
(In retrospect it appears that most hard science fields pay much worse than programming. Which feels unfair but is what it is. So I lucked out being not good enough at math/physics.)
I've programmed for work for the last decade. But I wouldn't call what I do computer science.
In college I got to the "weed out" course for sophomores and juniors. Operating systems. Most people floundered and I did exceedingly well in it. I became obsessed with different kinds of operating systems and how they were built. In particular, multi-core/parallel (which was a big thing back then) and real time operating systems. My professor invited me to the graduate parallel programming class as an undergrad and I had a GREAT time.
Then I got into compilers, the weed out course for seniors, and enjoyed it as well. All of the different optimizations, algorithms, clever things that can be deployed to make things fast and efficient. I ended up taking a graduate numerical analysis course as well which was math with a "computer science" flavor to it. It meshed very well with my brain and I loved learning about all the different speed up procedures and ways we can make computers do math by cleverly manipulating functions.
I was always interested in computer science adjacent things because growing up I was always using second hand computers, and so I had to come up with ways to make things fast on slow hardware. Once I got into school it solidified my love for the field itself. My only regret is I wasn't able to finish graduate school because I was paying out of pocket and working a 40 hour a week job.
In college I went to the CS lab late on a Saturday and bumped into an underclass acquaintance who had been fighting with a program all day. I exclaimed that they should have pinged me as I would have gladly helping get the code working..
While I was studying physics I made an internship at a research institute. I was surrounded by world class physicist (noble price winnerS next building) and mathematics in the theoretical department feeding one of the #10 supercomputer with simulations.
You can imagine how hyped I was starting there as someone knowing shit about shit
Reality hit fast since people spent like 80% of their time fixing other peoples code and spending all free time complaining about the same. Well, no wonder since the code was a pile of randomly attached PhD/master/whaterver-theses of people building software for one purpose and one purpose only to make their stuff run. All mixed with the attitude "I'm a scientist how hard can some programming be...".
This was the time I realized the difference between programming and software engineering with project management and architecture (plus I'm not good at physics). In fear to go down a similar road I started listening to CS architecture/engineering courses at my university to make sure what I'm doing not just feels right but actually is.
>10y fast forward I would say, maybe it was not the smoothest transition into CS (in a broader way) and I would challenge the one ore the other argument from back then but I never regret by career decision :)
My dad is a software engineer, so it was always around me. He installed Visual Studio 2008 on my childhood laptop. I didn't pay too much attention to programming at this point since I was more distracted by video games.
In high school, I got really into JS (for portability reasons). I started learning C in my senior year after my dad gave me a copy of The C Programming Language, which is still on the shelf behind me right now.
College is obviously a time for exploration for a lot of people. For me, it was a time of exploration in technology (less exciting then some :p). Learning new things that I loved every single day was such an incredible time for me. It also led to the Dunning-Krueger effect, as I'm sure we've all faced. The beneficial side of that is that I learned the idea of what I didn't know, so I had the ability to go off and explore myself.
If I had to pin point a specific moment, I'd probably choose my introductory CS class's final project, which was to implement the client and server for an /r/place clone in JavaFX. Writing server code became fascinating, on top of working with rendering the (very simple) GUI. I just felt like I actually made something that was interesting, both technically and on the surface.
When I was 12, my parents bought an Osborne 1. I was busy learning how to use all the apps, and one of these was called SuperGraphics by Eric S. Ruff. Dad bought it over snail mail, and it arrived on a 5.25" floppy with a handwritten thank you note.
SuperGraphics was a drawing tool, and it had one really neat feature: it could export a BASIC program that would recreate the image you drew.
So I loaded up MBASIC, something I wasn't really familiar with, and took a look at the code. It was a whole bunch of POKE statements with hard coded addresses and values. I tried changing some of them and I found that I could get the position and types of characters on the screen to change.
Then I started digging into BASIC more, and learned about variables and loops, and then I was able to draw all kinds of stuff!
Some short time later, Dad was driving us to church and I remember realizing and saying that I had a lot more fun writing a program to generate an image than I did just using SuperGraphics to draw it. We were driving down Franklin Road, just about to cross highway 99.
So thank you, Mr. Ruff, wherever you are, for getting me started down this path.
My mom was a schoolteacher. I was in fifth or sixth grade, so after school I'd walk from my school to hers to wait to get driven home. Her school had an Apple II, and I'd tinker away on it.
One day, another teacher asked me what I was doing. I explained I was making a game using the random number generator. He asked what happened if the game produced the same number twice. I said that's OK because the RNG is more like dice than picking a card from a shuffled deck -- it has no memory of past numbers. His follow-up questions were strange, and I gradually realized that he must think dice actually do have memory; otherwise, how could you have "streaks" and "dry spells" and all the other superstition around casino gambling and betting?
This was around the time I figured out that there are some folks who get certain concepts, and others who don't. I happened to get the ones that made programming easier.
I was a grad student in statistics at the University of Wisconsin - Madison. I was struggling; things just weren't clicking. I had an intuition that statistics and computer science would be a meaningful combination, so I started looking at CS courses. I took Charles Fischer's graduate course in compiler design using the dragon book, and it was as though the lights turned on. Everything made beautiful intuitive sense. It was as though I had finally found the academic discipline that fit the "shape" of my brain! Charles eventually became my PhD advisor. As with many other UWisc CS grad students, I am deeply grateful for Charles' impact on my life. He helped me find what I guess I would have to describe as my life calling. These days I'm working on challenging and interesting mathematical optimization software in the cancer radiation treatment space.
I always enjoyed programming (like, from 3rd grade onwards). Basically, from my first line of BASIC, I was hooked.
I realized I was built for computer science during my first industry internship. The job was in probably one of the most interesting corners of the industry, but I still found the day-to-day slog of software development was boring and tedious. The only part of the job I enjoyed was interacting with the researchers, who were working on really interesting and difficult problems that I had no idea how to solve.
I figured I would die of boredom within 5 years if I became a software developer, or have to switch domains every few years and get my stimulation from the domain details. But I really enjoyed the computing part, not the applications. So I became a computer scientist instead of a software engineer.
I was screwing up in high school algebra and I discovered I could program my TI-86 to do my math homework for me. I distinctly remember struggling with FOIL (first, inner, outer, last) and I would mess up one of the calculations doing it manually so my end answer would be wrong.
I always got harassed for not showing my work. I had a better way I didn't need to. The calculator did it for me.
This was one of my first experiences being punished for my gift. The teacher hated me for this creativity and instead of working with me to figure out how to get the program to show the work so I could get full credit, she just dismissed me as "doing it wrong". Awful teacher.
I love programming but I am having a tragically awful time trying to find work in my career after a few years of underemployment and unemployment.
As a third worlder in a considerably corrupt and iniquitous society, it was all about avoiding either a dead-end quasi starvation little impactful job, or morally questionable work. The realization itself was essentially religious to me, God guided me towards this decision when I was 16. At 29 it was well worth it, I have my own international business while still living where I was born and being a force for good.
As a child I was always doing crafts and loved playing with electronic circuit toys and lego robots and such. With 12 y.o. on school we were taught LOGO (that programming language with a turtle) which allowed me to do anything I wanted as fast as my mind went, without physical limitations and without needing to buy material nor tools.
I went into college expecting to major in physics. My first non-general physics class was Modern Physics. The first half was a review of all of classical physics and I got an A on that half. The second half was quantum mechanics and I got an F on that half. It was just too abstract for me and the math was too intense. I switched my major to Computer Science.
For me it was creating a minecraft server for my friends. I looked up Youtube tutorials, got help from my dad to port forward, and started installing plugins.
Then it was Minecraft mods. Back in the day you had to "unzip" the Minecraft jar file and manually drag and drop new classes into the jar. You also had to delete META-INF, good times.
Same here. I started by hosting Minecraft servers on a spare PC I had. Then I taught myself web dev/design since I figured my server needed a website. Later I got into mod & plugin development. I also spent a ton of time using the ComputerCraft[0] mod to program in-game robots (turtles). It's been over a decade and my love for Lua is still stronger than any other language I've used since.
The father of my (still) best friend bought a Sinclair ZX81 in 1982.
After observing his attempts to get "the thing" to do whatever he had in mind I started asking questions. He soon lost his patience and handed me the BASIC manual. It took me a couple of hours to get the formatting & meaning and then it happened. Like what some people describe as love at first sight, I lost all interest in everything and everybody I had cared about, JUST wanting to spend time and dedicate my adolescent brain to coding.
40 Years later, while spending my whole working live at a desk, I've seen many colleagues with back, neck, shoulder & arm problems. I never had any issues. That was the moment I knew I was build for this work.
(I think the question is better phrased using "computers" more than "computer science", since the latter is quite specific (assuming you refer to the former))
Regarding myself, I've realized it immediately when I was a child, and I saw a home computer for the first time. After getting one, I quickly got into (small) programming, by reading the manual.
I still have the same feeling of curiosity, decades after :)
I take the chance to express that in my opinion, the absolutely most important thing as a passionate SWE, is to put oneself in the conditions to maintain and feed that curiousity (within the limits of a realistic job and commitment). I can imagine that it's easy to get bored and/or burned out.
Middle school, there was a summer program that taught how to make a website using Geocities, basic HTML and CSS. It was magical to SEE something I'd created, even if it was just a designer's nightmare of a Metallica fansite. We only had something like 10MB(?) of storage, so I had learn quickly about the differences between the image formats that Paint.exe would export to. Problem -> Solution (use jpg). Comparing the size to the quality I learned there were always trade-offs.
20 years later, it's nearly all the same stuff. History's just gone round and round but in the end we're all just trying to share what we like with others.
In 1st year and actually in 1st week at Uni. Having learned electronics by myself in High school I thought that I want to be an electronics engineer so I applied to such faculty. One of the courses was programming and the practical part of that course was to learn Pascal.
So here I am, 19 years old, never even touched a computer before, looking at a very bulky 286, with it's CRT monitor heavier that Sisyphus' stone, not even know how to turn it on (button was on the side, not visible from front) and yet I knew right there and then this is what I'm going to do for the rest of my life. Love at first sight, still loving programming more than a quarter of a century later.
I was 12 years old during the Soviet era. I randomly saw a short vignette about computers in a pop-sci film on TV, and it clicked right away. I knew instantly that this is what I'm going to do for life. I had no idea if I'm built for this, or whether I'm smart or not -- and I didn't care. The books and projects came years later.
BTW, my dentist of 20 years is the same. At twelve, she knew that she will have her own dental clinic -- and she did open her own clinic about 10 years ago (she previously worked for hire). She's the best dentist I've ever had, and even though she doesn't do much work herself nowadays, her hires are excellent.
I was kind of avoiding it for a while since I was concerned about rampant outsourcing for some reason. College me thought accounting or math might be a safer bet.
Well I took Programming I and ended up enjoying it enough that I really didn't mind the extra time it demanded from me to do well on the assignments, in comparison to other classes anyway. I decided to pick up a minor in CS which ended up growing into a second major with the help of a little extra time in undergrad.
12 years working now and still enjoying it for the most part.
> I was concerned about rampant outsourcing for some reason.
Because this concern was pervasive in pop culture / career advice columns during post dot-com. Fear-mongering about outsourcing is probably one of the primary causes for the huge run-up in software development salaries in the 2010s.
Hah! An Accounting prof told me that I should double in Accounting because CS would be outsourced. I said something like "well, maybe, but CS is going to automate a ton of Accounting jobs either way, and the accessible Accounting jobs that continue to exist will require some programming. So I will choose my job maybe being outsourced over my job definitely being automated."
I'm now on a few committees at the college and mentioned this conversation to him. He remembered it, even though it was may years ago. He laughed and told me that's basically what happened -- for a few years they had very low in-field placement rates because there are not enough personal tax prep jobs to go around and the larger accounting firms demanded programming skills for entry positions. The Accounting major now requires multiple CS courses and he encourages his students to double-major in CS.
On that note, I'm bearish on SWE compensation and bullish on CS research compensation over the next 10 years. For basically the same reason. We've been massively under-producing (good) CS PhDs because industry pays so well and the standard advice is "only idiots get PhDs when industry starting pay for folks who can get into good phd programs is 150K+".
Basically, "zig when everyone else is zagging" is pretty good early career advice.
well, how many years does that take though? That's a lot of time to not be earning. Then there's kind of a question of making sure the focus is something people are going to really need in the future. Feels risky.
In Kindergarten there was an Apple //e in the classroom. When I saw it I thought to myself "I am going to touch that every second they let me touch that."
The moment I realized how much I hated and sucked at writing with pen and paper as a child. Little did I know the whole world would use computers for work and move away from papers to the most part in a few years.
My handwriting was so bad I couldn't even read it myself sometimes. I was the bane of teachers.
What got me hooked was some random book about HTML. I read it and learned all the basic tags in half a day and put together a page. That did it for me.
While learning Logo in elementary school, the moment I understood what recursion is.
While I have never worked as a professional software developer, computers have been a hobby all my life. I don't think the fact that the language I have mostly written code in in recent years is Emacs Lisp is unrelated to the above moment.
I am in no way built for it. I know people who are and there is a marked difference.
Though it does keep me stimulated, I’m not hopeless at it, offers great flexibility, and pays well. There is lots I could do well without, but that’s a tradeoff I’m willing to make.
To a computer scientist "programming" is simply a means to an end. Computer science is a rich field. Equating programming to computer science has been the greatest fraud ever perpetrated on the field, and in my opinion why so many people flunk out of the program. When I was in school the first and second semester were filled with people who wanted to be programmers (for the money) and got blown out by the operating systems course. I can probably count the times on one hand where I did any programming in my undergrad. Most of it was in graduate school to verify algorithms.
Here’s a delightfully pessimistic answer: The moment I reached 10 years in the field, unhappy with every development job I’ve had. I realised I’m built for it because I don’t have the capacity to escape from it.
Before I even had a computer. Working my way past the bugs in that ET: The Extraterrestrial Atari game and others, I wanted to make things like that, and heard I needed a computer to do it.
When I first setup ubuntu (its 2nd or 3rd iteration) and it took me about 3 months to get graphic acceleration working on it. I realized it was super fun.
Corporate software engineering killed my love for the field for a while. I did math for a bit, but always ended up coming back. I realized that the soul sucking (but well paying) job is a means to an end. I'd take half my salary to develop algorithms and play in compilers all day...but unfortunately there's all of 10 positions a year in compiler fields.
A lot of people tend to do stuff like gardening or woodworking and for many this stuff works. I tried it, but I always said "damn I could design something to do this for me" and I never "got" it. I couldn't finish graduate school because I have bills to pay and you don't get classes paid for unless you sell your soul to the university. They offered me an insulting $14,000/year to be a graduate student. I might've considered it for $35,000/year. So here I am, in purgatory, because I love computer science but my day job just wants me to throw together another CRUD app.
Same happened to me except one difference. I wanted to get out for around 15 years then I quit my job and lived in another country and travelled to try to leave it but I couldn’t find something else I enjoyed. then I came back to the industry and still hated the stress around it. Due to the pandemic I was forced to, in a way, face my fears around work. I stopped avoiding the parts of the work I found stressful and instead challenged myself. I stopped trying to do things in a half ass way when I knew what the right way was. In hindsight I think I was a pretty mediocre software engineer. And just recently got a new job that is the most challenging I’ve ever had but I chose into the job and sought something that felt very mission driven. So it took me roughly 20 years to get acceptance around the work and my relationship to it.
Doesn’t mean work isn’t stressful but everything else around it has changed. I care a lot more about what I’m working on and participating in a deeper way.
So… the way out can mean being exactly where you are now
I want to buy a backhoe and install septic tanks and dig house footers 2-3 weeks / month (around the weather) and use my software skills 1-2 weeks a month on projects / teams that have the same values I do around simplicity, clean code, automation, etc.
I kind of always knew I could probably program, but had resisted software development and didn't really "get" computer science or development.
I resisted going into software development for a very long time. Post uni I got a job as a (very underpaid) "data analyst" at a consultancy firm.
While doing that job I despaired at the state of tools and while there was a separate "development team" that got to play with C# and develop the "New project" that was going to replace all the cobbled together analyst tools, we analysts had to make do with the Access VBA solution (that itself was a migration of an earlier cobbled-together excel solution).
I learned to develop by playing around with that solution, fixing bugs and improving speed. My best speed-up was just by having the data copied locally; when I arrived everyone ran the access file from the network share. All the data processing was round-tripping every call it made via the network. Processing went from an over-night job to being run in minutes.
One of the advantages of having the developer team tied up in the (forever delayed) "new solution" was that the analysts were left to themselves to mess about with their own tools in peace.
I drifted away from that job and when I was ready to work again I just decided could probably do software development after all and so got a job doing VB6 development. I fluffed the interview, forgetting the syntax for a simple loop in VB6 but I got the job anyway. Perhaps because there weren't many people wanting to do VB6 in 2012!
In that job I mostly just learned on the job. It helped to have great colleagues from whom I could learn how to approach things and learned the ins and outs of development and how it differed from programming.
Computer science?
My interest in computer science came much later, mostly thanks to TIS100 as well as Petzold's CODE. Those really helped me understand some of the computer science behind the programming.
That said, I'm still not that sure of my compsci skills, I tried to watch a Data Structures course someone posted here recently and it took me straight back to uni maths where watching it I had a feeling of, "This all seems true and I get that it's true but I don't understand".
Like, it's great being able to prove all sorts of things about the nature of those data structures but the actual computer science stuff seems so disconnected to the real world. You can halfway through the lecture and realise that while all the structures have those nice provable properties, actual implementation is left to the reader, or worse, an "open problem".
I had a PCjr, which was an 8088. Very slow, EGA graphics. 256k RAM. I did have a 20Mb hard drive, though.
I wanted to verify that algorithm, though. So I bought some books on how to program in C from Waldenbooks. After not too long I managed write a program to draw a Mandelbrot set on my PCjr. It was incredibly slow: I watched it paint each pixel, and let it run for many hours before I would get a complete set. But after much trial and error, it worked.
I was 16 years old. It was the first thing I had ever done that I was really proud of.