How did you start off programming?
LB_ last edited by
I couldn't find an existing thread for this with the forum search function - feel free to merge.
@lb_ A friend got The Games Factory back in the day, giving me my first introduction into game development. Never managed to produce anything useful from it, but it was easy and fun to play around with. I also used Fusion 2 to throw together quick mockups during my brief stint as a game developer, as it was a pretty good tool for that. And I'm even doing some game development-related things in my current job, so I'm back to working with it, surprisingly.
I started much the same way. When I was around 11, I wanted to learn how to make computer programs, so my dad set me up with The Games Factory, and a couple years later I saved up money to buy Multimedia Fusion 2. Using them taught me some pretty important fundamentals about converting my ideas into something the computer could understand, and the medium of game design made for instant feedback.
In Junior High, my Speech teacher asked me to be the programmer for his brand new Robotics club in exchange for a free 100 in the class. He handed me a sheet of printed C code which I had to recreate in EasyC, the drag-and-drop software used to program Vex Robotics Microcontrollers at the time. I went on to program Vex robots for six years as part of my Junior High and High School robotics clubs.
Right before high school, I started learning C++ so I could write Extensions for MMF2 using the official plugin API, so my first several years of desktop programming experience was in writing plugins for MMF2 - no console output, no log. If the code was wrong, either nothing happened, or the application crashed, and I hadn't yet learned how to attach a debugger. It was a really steep learning curve but I was very passionate about it because it just seemed so cool to me. I learned a lot about how to find information and help for programming on my own - forums were no use because it was always in the context of the plugin API.
Anyone else got any interesting starts?
I think it all started with Legos. Those were my life for years. Legos, and books. Then I discovered computers.
I liked messing around in games, running against walls, and generally breaking things. Then one of my cousins gave me Starcraft, and another explained the editor a bit. So I started figuring things out a bit.
Eventually I moved on to Warcraft 3, which was far better editor-wise. At this point, I was still fairly sure I was going to be a novelist, but realized that if I don't care too much what I'm doing, but want plenty of money and the enjoyment of building things, programming could be interesting.
So I went to university for that, and became good at it afterward.
So I went to university for that, and became good at it afterward.
I assume you mean after university, which makes sense. University sure as shit won't teach you to become good at programming.
My initial exposure, as I had said in the How I Broke My Computer thread, was with a TRS-80. My dad had one lying around, and it was fun to use. But what really caught me early on was the Bukkit server for Minecraft. I knew that plugins could be easily written for it, that made Minecraft behave differently. I knew that even idiots could write them, as evidenced by the wide array of really shitty plugins. So I cracked open a Java book, learned the basics with some simple programs, and set about making a plugin to make eating food give you potion effects. Eventually, I was banned because I was young enough to not realize it was against the rules to distribute plugins that automatically op the author. By high school I knew enough without any classes to win third in nationals for the LHM Codequest (technically in the Novice division). I guess I'm still in that place that most people consider their 'start', but whatever.
University sure as shit won't teach you to become good at programming.
In the university, I learned about abstraction and encapsulation. I learned about data structures and Big-O complexity. I learned about generic programming. I learned the difference between a linked list and an array. I learned about pathfinding. I learned enough about C++ to realize I never wanted to have anything to do with it ever again. And that was just the first year.
I use a lot of that stuff on a regular basis to this day. I didn't become a good programmer at college, but by laying a solid foundation for me, it absolutely did "teach me [how] to become good."
Atazhaia last edited by
As mentioned here I started off with The Games Factory. But my first real programming experience was taking "Programming and Web Design" as an optional course in (the equivalent(?) of) high school. This introduced me to very basic C, written in a very colorful (as in code highlighting using all of the 16-color palette) DOS editor that we were using in the early 2000s. Also, plain HTML 1.0 without any CSS, written in Notepad I think.
And then I got my current job, where I am still not saved from having to study more. At least it's my employer paying for it. As soon as my workload has lessened they are going to send me off to get Cisco certified, so that's something to look forward to I guess.
Benjamin Hall last edited by
I've been using a computer forever (I was typing by the time I could read, in about kindergarten). My family started with the IBM PC (8088). But I didn't really start programming for real until grad school. My research area was computational quantum chemistry--simulating collisions of atoms and molecules at intermediate energies. All the interface and analysis code was in Python, so I learned by modifying existing scripts and then writing my own. From there, things snowballed.
I taught myself Swift to write an iPad app for school, C# because I prefer Microsoft to Apple, HTML/CSS/JS to teach a web design class, and PHP for a school-related project. I still can do Python, but it's no longer my daily driver.
@masonwheeler You may use a lot of that stuff but none of it is what makes a good programmer. Among the things you didn't mention university taught you:
- How to write maintainable code
- How to write secure code
- How to handle errors
- How to write code that can be tested
- How to test your code
- Revision/version control
- Documentation of your requirements, design, and implementation
I could go on. That's what makes a good programmer, in my opinion, not knowledge of the programming language. It's an attitude, and I don't see it that often from college hires.
anotherusername last edited by anotherusername
One day my dad brought home a new computer and goes "hey look, you can write programs on this thing." So I read the GW-BASIC manual cover-to-cover a few times, and diddled around in it quite a bit.
Then one day he brought home a floppy disk with PowerBasic compiler and a manual and goes "look, this can turn your programs into DOS executable files, and they'll run a lot faster". So I diddled around in it quite a bit.
I had several books on programming in various different BASIC dialects, some with lots of sample programs which I could run after making some modifications for the differences between versions, graphic modes, character sets, and so on.
He tried to get me interested in DBase programming, but I didn't have much interest in that at the time; later on, he got me Visual DBase, which was the first interactive form-based GUI-builder that I'd used -- basically an environment very similar to MS Access.
Then I discovered that I could download and set up Apache and install the PHP and MySQL modules and have a full-fledged web server on my computer to play with. So I managed to get Apache configured well enough that it'd run (no small chore), and I diddled around in PHP a fair bit also.
At university, I was forced to take a few programming classes in C++... no fancy colors or fun graphics like BASIC had, but it did give me a better grasp on concepts of pointers, linked lists, trees and such -- really important stuff, supposedly. I also took several different assembly programming classes (x86 -- my first introduction to DEBUG.EXE, although we primarily used MASM; 6812; and MIPS); had a class where we did a simple TCP server application in C and a client application in Java; one that involved a decent amount of MatLab (which is sort of like Excel -- on steroids!!1), and one that got just a little bit into PSpice.
In the university, I learned about abstraction and encapsulation. I learned about data structures and Big-O complexity. I learned about generic programming.
It taught me what. But never once did they touch on why, which is by far the most important thing to do when you introduce any of those concepts.
I posted previously on the topic, but it was in the Lounge.
In reply to a mention of a TRS-80 Model I:
I learned on those. There was a monthly magazine that had printouts of programs I would type in and run. Of course I'd typo some of it, so would then have to debug.
One of my favorites was a game where you move a spaceship back and forth along the top of the screen shooting at asteroids scrolling up from the bottom. As provided, I could play it forever, so I modified it to get progressively harder.
ScholRLEA last edited by ScholRLEA
A copy of 101 BASIC Games and terminals at the high school remotely connected to the city government's Pr1me mini during my in freshman year.
Oddly enough, being able to use a computer at all was such a novelty in 1981-82 (well, in Stamford, CT, at any rate) that, when the high school decided to just open the computer lab up to everyone until 5PM every weekday, it was surprisingly popular even with students who weren't the same kind of massive nerd I was.
Unfortunately, the school we were reassigned to the next year didn't let anyone except seniors in at all, and it wasn't until my Junior year (when my parents bought me and my brother a very used Apple ][+ to share, and my father got an equally used IBM PC/XT - two floppies, not HDD - for his home office) that I got the really do anything more with it.
HardwareGeek last edited by
I'm pretty sure I've posted at least some of this before in bits and pieces here and there.
My introduction to computers was long, long ago (early- to mid-70s), when hobby microcomputers (the term "personal computer" had been used here and there, but there were no commercial products described as such) looked like this:
I would have been 9th grade. The Apple ][, Commodore PET and TRS-80 were still about 5 years away, the IBM PC ~10. One of my school buddies showed me a strip of punched paper tape and claimed it was a computer program that he wrote; I didn't believe him, thinking it was from a typesetting machine from a recent field trip to a newspaper printing plant. He said, no, there was a classroom with a computer in it, and the teacher who taught in that room was usually there before class and at lunch, and would let you use it if you asked. I still didn't believe him, so he showed me and introduced me to that teacher. (I didn't previously know him because he mostly taught 11th and 12th graders Chemistry, Physics and Calculus.)
The computer was a PDP-8/L, a professional minicomputer that sold, or so I was told, for $10000. (You can get a vintage one on eBay for a bargain $5000.) It featured 4k words (12 bits) of magnetic core memory, and I/O was through an ASR 33 teletype at a whopping 110 baud — hardcopy, upper-case only. To the left of the keyboard are the paper tape reader (in front) and punch (behind).
There were restrictions imposed by the teacher on what students could do with it. Generally, we were limited to its resident BASIC interpreter, because the teacher used it occasionally for calculating grades, and it took a half-hour to load the interpreter from the tape. We also had compilers/interpreters for a few other languages — FOCAL and FORTRAN are the ones I remember. It took 3 tapes and multiple hours to load FORTRAN, and we never did because nobody knew the language.
The switches on the front panel could be used to load hand-assembled, raw binary machine instructions directly into memory. Not only could, but had to be, sometimes. Like on the rare occasions that we switched languages, one had to toggle in the boot loader, giving the machine just enough smarts to transfer data from the serial port (the teletype) to memory, so that it could continue the next stage of booting from a tape. DEC made other peripherals, like a high-speed paper tape reader, extended memory (another box as big as the computer that held an additional 4k words, and required flipping a switch on the front panel of the computer to access — 4k internal or 4k extended, not usable as a single 8k address space; the front panel switch was the high-order address bit), or even storage peripherals that could store files (we didn't even understand what that meant), but we didn't have any of that fancy-schmancy (and expensive) stuff.
What did we do with this amazing technology? We converted between Celsius and Fahrenheit, and wrote loops (what's a for? IF CONDITION GOTO 10) to have the computer spew insults at each other. Eventually, one of the older guys graduated and went to college. He came back a few times and gave me an introduction to what was going on inside — machine code and assembly, and even a taste of FORTRAN.
Eventually, I graduated, too. Engineering students have to take at least a few programming classes, and the very first college class I took was FORTRAN, in which I got a grade of something like 109%. (An extra 10% from extra-credit assignments, minus 1 point on one test, for a true/false question that said "It is not possible to do thing in FORTRAN." It wasn't possible in the material that was taught in class, but the textbook explained how to do it, so I answered "false." I was quite annoyed that the teacher wouldn't give me the point for the actually correct answer, even after I explained why it really was false.) That was also the semester I learned I never wanted to touch COBOL with a ten-foot pole. The next semester I learned some now long-forgotten mainframe assembly language.
Eventually, left the community college and went to university. While there, I did a 6-month stint working in industry writing a simulation of a microprocessor in a language called MAINSAIL. When I returned to uni, I wanted to do something similar for my senior project, but MAINSAIL wasn't available. C seemed to be the best available language for bit-twiddling, so I learned it on my own (with help from one of my roommates who was a CS major). Other CS classes useful for Engineering followed — Numerical Methods, because some math is hard or impossible to do analytically; Data Structures, for reasons I no longer remember; Computer Graphics, because I wanted to.
30-ish years later, I work mostly in SystemVerilog — Verilog is an inherently and massively parallized language designed for describing the logic of digital circuits, in which potentially every gate in a chip is a separate thread running concurrently, and SystemVerilog adds to this a bunch of OO constructs that are very useful for designing the test harness around the chip — C/C++ for writing test code to run on embedded processors, either in actual chips or in the SystemVerilog models of them, and Python for miscellaneous utilities. Most recently, I wrote a script to parse part of a chip specification in XML and spit out some SystemVerilog to test certain functions of the chip.
A much less auspicious start than some here. I had windows PCs around from early teens but I only used them, no programming. When I was in university I blew most of my first term student loan on a mac mini and discovered applescript. I never did much with it, my most ambitious script was one for when I was back home with dialup that would run on login, connect to the Internet and then open Firefox after a suitable wait. I wanted to detect when it was connected but couldn't work out how to.
Later, I basically fell into programming. I'd dropped out of teacher training and was basically applying for any job I saw. I ended up signing up with a company that provided a 3 month full time training course in SQL and c++/mfc. Rather than paying for the course I had to work through them as a contractor for two years.
Scarlet_Manuka last edited by
When I was about 7 or 8 we got a Dick Smith VZ-200 - about the same sort of vintage as the VIC-20. My dad and I messed around with it quite a bit, we wrote some text-based games and such. By the time I was in high school I used it to write stuff like a two-variable stats program (we didn't have that on our calculators back then) and to be lazy at calculus assignments (Riemann sums the easy way!). At that stage I was also getting into Z80 assembly language, and disassembling various programs and going through them to see how they worked, which was pretty fun. (I also mapped out stuff like how BASIC programs were stored in memory, and which byte corresponded to which keyword, which let me do silly things like entering a BASIC program using graphics characters instead of the keywords.)
When I went to uni I did CS in my first year and became acquainted with the concepts of structured programming and OOP. We learned Pascal and PDP-11 assembler, which even then was a relic of a bygone age. (Nevertheless, I found it easy to work with compared to the Z80 assembler I was used to. So many registers! Multiply instructions!)
Around the same time we got our first Windows PC at home. By this stage I was starting to use Excel heavily at uni (working with physics experimental results), and after a while I got into Excel macro programming (this was before VBA).
Eventually I wound up doing bits and pieces in a variety of languages (mostly Pascal and VBA, with a fair bit of Matlab in my previous job, and sprinklings of C++ and Fortran there as well). One of those VBA things helped me get this job, where I made a few more VBA tools (the first one I made into a full-fledged Excel addin; it started off as a personal project to make a repetitive task easier, but not long after the first time a colleague saw me using it everyone on the team wanted a copy).1 Along the way I acquired a good grounding in SQL and was maintaining our PL/SQL stuff until we got rid of it. Nowadays I mostly work with Informatica to get data from point A to point B, suitably mangled.
1 Excel VBA has a really good object model. Word's is pretty good but not great. Access's is just awful. Thankfully - fingers crossed - I don't have to deal with it any more.
Gurth last edited by Gurth
Back around 1980, we had a Sharp MZ-80K that was my father’s principal hobby at the time, so he spent a fair amount of time tinkering with both hardware and software. I learned the basics of BASIC from him on that machine, and never really progressed much beyond that level. Aside from being taught Pascal for one hour a week for a few months when I was studying chemical engineering (and, of course, this consisting of having to write much simpler programs than I’d do for myself in
GW-BASIC at that time), I’m entirely self-taught — as far as programming is concerned, but also pretty much everything else, really.
Unlike, I suppose, most people here, I’m not a professional programmer. I write programs for my own use when I need them, and can code well enough for that — and that’s also usually when I learn something new (in between swearing at lots of stuff), because half the time I want those programs to do things I don’t know how to do yet
that’s also usually when I learn something new (in between swearing at lots of stuff), because half the time I want those programs to do things I don’t know how to do yet
Sounds like my professional programming experience
thegoryone last edited by thegoryone
Trying to make clan websites during my days as an avid Age of Empires/Age of Empires 2 player which gradually moved towards "What's this PHP thing these lads can do?". Technically, I only knew HTML before University and during our Java modules, I happened to come across a "Sams teach yourself PHP & MySQL in 24 hours" book in Waterstones and flicking through it I quickly realised that PHP was so similar to Java that I could pick it up and run with it (Of course, now I know why but at the time it was a revelation).
I also had a few old Spectrum mags back in the early 90s that had small but complete games you could write out yourself and play but I had no idea at all what I was going, it was pure regurgitation (I was under 10 so give me a bit of a break on that one!)
Medinoc last edited by Medinoc
I was like 2-3 years old when my dad bought an Amstrad CPC 6128. He also had a Minitel, which was friendlier to kids (as long as you never hit Connexion/Fin, you could just type away on the keyboard and nothing would happen apart from echo).
I was immediately enraptured by the act of pushing on keys to make letters appear on the screen, and soon enough I learned the art of stupid basic hello worlds:
10 PRINT "Bonjour" 20 GOTO 10
And in time, and with the help of the phonebook-sized user's manual which actually contained a full course on Locomotive BASIC, I actually learned how to make (bad) programs.
Later, I ported by BASIC skills to programmable graphing calculators (a Casio fx-7800G, later a CFX-9940 GT+ Graph 60, and finally the Rolls-Royce (unlike the slow-as-molasses Casio), the TI-89). The latter could actually manipulate images and parts of images in BASIC, and supported Assembly programs without jailbreaking, which was awesome.
Eventually I took actual computer programming courses after my Bachelor's Degree, learning 68k assembly, C, 8086 assembly, sockets, the Win32 API, and awful "C++". Next school, I learned more real-life stuff like algorithms, databases, object-oriented programming, parallel programming, Java, POSIX, actual C++, distributed programming, and finally C# for my end-of-studies internship. Never looked back.
To this day, I mainly program in C# on desktops. And in 10 years of working experience, I've learned at least part of the things mentioned by @heterodox.