How did you start off programming?



  • I couldn't find an existing thread for this with the forum search function - feel free to merge.

    @Atazhaia said in WTF Bites:

    @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.



  • @magus said in How did you start off programming?:

    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.


  • Notification Spam Recipient

    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.



  • @heterodox Precisely.


  • Impossible Mission - B

    @heterodox said in How did you start off programming?:

    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."



  • 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.

    University is where I got more programming in the form of C++, and similar from ActionScript. Although being in media I was more into design than actual programming. My first job after that was in game development, where they were using Unity with C# so I had to learn that on the go. After that job ended I thought that maybe I should add some actual programming skills to compliment my media, so I went back to uni to study Android app development, picking up Java and Python in the process, as well as more web stuff like CSS, JavaScript and PHP.

    The after not getting a job at IBM I was picked up for some additional training to match pretty much all the governmental IT jobs around here, bringing me into full stack development and poking at JavaScript frameworks like jQuery and Angular. More CSS with BootStrap. Enterprise Java with JSP. Also server management for running all the stuff. And agile development (done wrong).

    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.



  • 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.



  • 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.

    0_1509056786538_f965d444-1c69-4175-9e6a-e64fe505b46c-image.png

    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.

    0_1509057465859_441ad4b7-baae-4438-afdb-b2161e899976-image.png

    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.

    Eventually he killed a tree and printed out the whole entire MDN Javascript documentation (it was probably a couple hundred pages -- this was around the time of Netscape Navigator 2.0, when document.write was in its heyday) and put it in a binder and brought it home and goes "hey look, this is the language you use to program the web." So I diddled around in it quite a bit.

    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.

    Then in high school I spent a few summers working in an office where they were using this internal application that was all built in PHP, and I was called upon to maintain it fairly often. This was also my first introduction to the humble HTA. So I diddled around in those; they (not WSH) were how I first became familiar with some of the DirectX objects that allow VBScript or JScript to access the filesystem, registry, and such, because they run in a privileged mode that allows scripts to access those objects and methods without security prompts (as do WSH scripts; Internet Explorer was the only browser that allowed Javascript to use DirectX objects, but doing so created nasty security confirmation popups).

    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.

    Since college, I've mainly worked on Access+VBA, Excel, a tiny bit of Javascript, the occasional VBScript or JScript (to run in WSH), and some more specialized controls stuff. On the side, I've continued diddling around in Javascript, and I'd call it my best language, really, although I also feel like I have the underlying fundamentals to translate into just about any language if I needed to. I've done a bunch of the 1-kyu Javascript katas on CodeWars, which is actually a pretty neat platform to practice on.



  • @masonwheeler said in How did you start off programming?:

    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.


  • :belt_onion:

    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.



  • 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.



  • 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:
    0_1509072362626_43f0c0a4-d345-4e64-bcc2-599ee820f9ca-image.png

    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).
    0_1509073612547_229656dd-f1d9-4d95-afb4-e56f1c1eaf7f-image.png 0_1509073573762_5c954b61-4c78-4a5c-82bd-6500c886afee-image.png

    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.


  • kills Dumbledore

    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.



  • 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.



  • 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-QuickBASIC 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 :)


  • kills Dumbledore

    @gurth said in How did you start off programming?:

    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



  • 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!)



  • 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.


  • Discourse touched me in a no-no place

    @magus said in How did you start off programming?:

    It taught me what. But never once did they touch on why

    It's a poor university that only ever teaches what. Teaching why is much harder, of course, as is learning it, but it is the actually valuable part. If you want to know what, read a manpage.


  • Discourse touched me in a no-no place

    I started in the early '80s (my brain wants to say 1982, but that's a WAG) with a ZX-Spectrum. I had to write my own programs for the most part, as I couldn't afford to buy games. So I wrote, and I tried to learn from the system manual. My first program was a piece of BASIC that drew an envelope shape, pixel by pixel. Not too shabby for someone less than 10 years old. :)

    By about 1990 (I'd acquired a PC by this point), I was writing assemblers and IDEs, basically all using my own ways of doing things and the code involved really sucked. When I went to university, I picked up Pascal and discovered that there were much better ways of doing things; it was a total revelation. I switched to CS and learned all the stuff with algorithms and concurrent systems and theory and so on, and became a much better programmer as a consequence. Keeping my fellow students out of my system so that they didn't run xmelt on my screen every 10 minutes was a good introduction to practical security. ;)

    As long as I keep on practicing and learning, I'm pretty happy.


  • Impossible Mission - B

    @magus said in How did you start off 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.

    Wow, your school sounds pretty awful. :(


  • area_pol

    I wrote my first program when I was 6 or 7 - it was some kind of Hello World on my father's ZX Spectrum. I didn't go further than that for some time, computer was a gaming machine for me (Boulder Dash, Pyjamarama, River Raid, Skool Daze, Nodes of Yesod, ahhh the memories). Ocassionaly I copied programs printed in papers for computer enthusiasts (yes, magazines made of paper, yes, copied by hand, meaning typing - for those young enough to don't know how world without internet looks like) - I didn't understand how they worked, of course.

    Then I got my own computer, I was 10 I think: QL Spectrum. I read the huge BASIC manual that came with it many times, or should I say, tried to read it, as my english was very weak. I had some success with it and wrote programs significantly more complicated than before.
    Then came secondary school and with it the PC era. There were some 'Computer Science' lessons at my school and compared to typical CS lessons in our system of education (how to operate Outlook, Excel and a web browser), they were great. We learned some computer architecture, some history of computers and best of all, some real programming. First it was Pascal, which I hated, then C, which I liked and thought of it as a great langueage for many years after.

    During that time my main problems with programming were: finishing the boring parts of whatever I was coding and, more importantly, finding subjects for coding. It happened often that I set out to do some programming, being enthusiastic about it, and I couldn't find a problem to solve. This (and some of my personal quirks) got me interested in programs that were already made, by others, how they worked, how executables are built, how it all actualy works on processor level. So I started gathering information about it, dissecting programs, analysing them, etc. This naturally led me to assembly, reverse engineering and cracking.

    It all became a real passion for me. Analysing programs, modyfing them, breaking protection schemes, etc. It didn't have a big impact of my life in highschool yet, but it consumed me completely during college. I was reversing programs/protections, writing my own, coding tools, writing tutorials, teaching others online, etc. I got involved with some reversing groups and finally landed in REA (Reverse Engineering Academy) and the community around it. All of that took huge amounts of time (and energy). As a result I didn't have much time or heart for other parts of life. I got thrown out of collage five or six times, got no job and became socially awkward (more than before that is).
    Finally I forced myself to finish collage, or actually was forced by military draft, made bachelor degree and finished at that. Just thinking about collage made me nauseous, never mind going there and trying for masters.

    After years of dealing with RE, I got really good at it. I could crack every crackme/reverseme that I found, I finished both editions of REA and was fluent in assembly (MASM, mostly WinForms stuff). So, I was a master of craft that no one wanted, like building wooden wheels for cars or something. It was very very frustrating. Finding job in assembly or RE proved impossible, or maybe I didn't look hard enough, those were some hard times for me. Depression and nervous breakdown followed.

    When I got better and started actually looking for new opportunities, I found an internship program for a company that shall not be named. Entry requirements were vogue, so I didn't know if I could get in, but I had to choose one of two specific programs before applying: Java or C#. I tried learning Java for some time, but all I developed was deeply rooted disgust for the language and whole environment - when official Hello World tutorials downloaded straight from Sun's page crash, that's not very encouraging for a newcomer. So I applied for C# path, not having seen a single line of C# code, the decision was made by elimination, not by selection. I got into the program, probably because of IQ test results, because I had no idea about OOP or SQL or UML or design patterns - all of which were subjects for entry interview.

    Waiting for the internship program to start, I tried learning C#. Surprisingly (for me then), it proved easy to learn, it generally made sense and after some time it started to be fun. Not as much fun as ripping apart some already existing program, but it sure was not a chore like wrestling with Java. The internship went well, although my low level view of everything was an obstacle. I worked and learned like crazy for a year or so, when I started to feel good in C# and programming work generally.

    Well, that's about it. All of the above happened a long time ago. I changed jobs and positions many times since then, from pure C# I changed to full stack, plus some designing, plus some team leading, etc. My experience with low level stuff, that was a hindrance at the beginning, sometimes proves helpful - I often have ideas quite different than my colleagues, plus I know how things work, something that becomes more and more rare among programmers.
    I didn't abandon my RE passion completely, I switched to something more diverse, namely challenge sites. But I have very little time for that, unfortunately.

    [edit]
    I didn't feel weird while writing my story, but it sure feels weird to read it.
    [/edit]



  • @hardwaregeek FORTRAN is a horrible, horrible programming language.

    It was okay until you needed to allocate memory at run-time. Then it crashed for no apparent reason, even when you were sure you allocated all of the memory before using it and deallocated it when you were done. Then it took way too much tinkering to get it to actually work, and once it finally did it wasn't usually clear why it hadn't before.

    At least, that was my experience.



  • @scarlet_manuka said in How did you start off programming?:

    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

    GW-BASIC did that. I had a reasonably complete reverse-engineered schema of the language. I was at one point going to make a clone of GW-BASIC in Javascript (using a canvas for the display, and local storage for fake file I/O), but I abandoned it at some point -- IIRC I was in the process of trying to figure out how to get an expression like A$+INPUT$(1) to evaluate properly, since it needed to not only evaluate the expression but also halt the program to wait for a character to be entered.

    I'm almost tempted to dust it off and see whether it's hopeless or whether I could actually complete it.



  • Growing up my father sold computers (early-mid 80s). So I had lots of different ones to mess with, have vague memories of helping my father debug machines that were brought in for service. But I didn't really start programming until HS on my TI-83+ in TI-BASIC. I was super bored in math class and disappointed that my TI-83+ gave approximate answers for complex quadratic equations, so I started coding so that I could get an exact answer. Eventually got into C++, PERL and now C#.



  • @dragoon said in How did you start off programming?:

    Growing up my father sold computers (early-mid 80s). So I had lots of different ones to mess with, have vague memories of helping my father debug machines that were brought in for service. But I didn't really start programming until HS on my TI-83+ in TI-BASIC. I was super bored in math class and disappointed that my TI-83+ gave approximate answers for complex quadratic equations, so I started coding so that I could get an exact answer. Eventually got into C++, PERL and now C#.

    THinking about it, my first real programming was for the TI-85 (second only to the TI-86 for the best calculators ever made, and you'll take it from my cold dead hands) in high school. My calculator is older than most of my students...



  • @mrl said in How did you start off programming?:

    my main problems with programming were: finishing the boring parts of whatever I was coding

    You are not alone in this. :wave: I find this particularly problematic when I make a serious effort to actually engineer a significant (hobby) project and start with all the structural glue, but get bored before I get to the parts that actually do whatever interesting thing I set out to do in the first place.

    <blakeyrant>(See also: CADT)</blakeyrant>



  • @anotherusername said in How did you start off programming?:

    @hardwaregeek FORTRAN is a horrible, horrible programming language.

    It was okay until you needed to allocate memory at run-time. Then it crashed for no apparent reason, even when you were sure you allocated all of the memory before using it and deallocated it when you were done. Then it took way too much tinkering to get it to actually work, and once it finally did it wasn't usually clear why it hadn't before.

    At least, that was my experience.

    My FORTRAN experience, such as it was, was back in the FORTRAN IV days. What is this run-time memory allocation of which you speak?



  • My interest in programming started playing video games and wanting to make my own. I was around 9-10, and really didn't have the patience to really learn it at that point. I remember there was an episode or two from Clarissa Explains it All in the 90s where she actually made her own "video games" that made me wish I could do the same thing. It wasn't until I was around 14 or so when I got a Visual Basic book, and played around with it. Then I turned 16, made my own website with a custom-built CMS and forum with PHP and a hilariously bad flat-file database worthy of TDWTF, and things progressed from there. Discovered how much better MySQL was compared to flat-file, then how much better .NET was compared to PHP, and so on, up to where I am now.



  • @hardwaregeek said in How did you start off programming?:

    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.

    I should perhaps also say that the 6-month stint in industry was also my introduction to both UNIX® and the Internet.

    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

    And that using C for my senior project seemed to be the best available excuse for getting an account on the Internet-connected UNIX® system on campus.


  • Impossible Mission - B

    One day when I was in the 3rd grade, my dad completely unexpectedly brought home an (already old at the time) Apple IIe. I started playing around with it, and looking through the various user manuals that came with it, and it took about half an hour for me to discover Applesoft BASIC. The first thing that went through my mind was, "wow, I could make my own video games with this!"

    Well, of course I really couldn't with something as primitive as Applesoft BASIC, but that didn't stop me from trying! I haxx0red around as much as I could on that old computer, trying to figure out how things worked. Not too much changed until high school, by which time the old IIe was long-since dead, and we finally got a (again, very old) IBM PS2. I did a bunch of playing around with QBASIC on that. Tried to learn C but it was too messy and fiddly to wrap my head around.

    Then in junior year, a few things happened. First, I scrounged and saved up enough money to build my first PC from scratch. I was also able to sign up for a programming class. It was a lab of really old Macs (the PowerPC transition was several years old by this point, but we weren't using them) and we were learning the Mac version of Pascal. And I fell in love. All those concepts that I could never grasp in C suddenly made sense to me now that I was working on something that was actually designed with a the developer's comfort in mind rather than the CPU's!

    I was basically the star student in that class, and partway through the year, the teacher offered me a deal: if we'd come in that week on Saturday and help him set up a new computer lab at the middle school, he'd let me raid the surplus parts storage room at the high school and take whatever I wanted from stuff the school no longer cared about. Of course I did it, and I found a few interesting bits of hardware to upgrade my system with... and a copy of Visual Basic. That was great fun, until a few months later when a friend came over and saw me playing around with it. He was like, "hey, there's this new thing out, it's a sort of Visual Pascal--like VB but ten times better. You wanna try it?"

    That sounded great to me, and he was somehow able to hook me up with a copy of the brand new version 1 of Delphi. And he was so right; it was immensely better than VB. Armed with programming books checked out from the local library and a few custom components downloaded over our trusty 28K internet connection, I promptly set to work trying to build a Final Fantasy fangame from scratch. That ended up going approximately nowhere at all, due to me being completely ignorant of concepts like script engines at the time, and finding it way too complicated to try and hard-code all the cutscenes and event scripting directly into the game engine in a way that didn't completely b0rk everything.

    Senior year, I took the programming class again. It was on much nicer, newer Macs this time, but it was in C. I understood the concepts enough to do well in the class, but it was just annoying having to work with C's warts after the elegance of Pascal. (I still remember the :wtf: moment when I first discovered that / in C doesn't give the correct answer if both operands are integers!) Our final project in the class was that we had a week to build a game. Most people tried something really simple and textual. I was a bit more ambitious; I looked up some stuff on Mac graphics and tried to build a game of Tetris. I got it about 80% done, too, but I kept getting stuck on a glitch where falling pieces, under certain conditions, could cause blocks that were already in the well to get erased. I never managed to fix that one in time.

    Senior year was also when the same friend introduced me to StarCraft and Brood War. I loved essentially everything about the game, especially the editor! There were a few primitive tools out there for hacking the editor to make it more powerful, and that's how I first got into SC modding. I ended up getting pretty good at that during college!

    College was all C++, all the time. I found that extremely disappointing! I learned a lot, but half of it was "here's how to deal with this particular C++ annoyance," and I was very happy to get out of that! I kept playing around with StarCraft, getting heavily involved in the community for one of the greatest fan campaigns ever, The Antioch Chronicles. The team put out something that rivaled Blizzard's work, and even exceeded it at a few points, and it brought in a big community of fans, a few of whom are still my friends to this day.

    One of them started working on a forum-based fangame in RPG Maker 2000, which is where I first got introduced to that. I turned out to be really good at the technical side of it, and I helped a few people out on projects here and there, until one day I got asked to do something that was beyond the engine's very limited capabilities. I didn't want to admit that, and I was halfway to implementing a primitive assembler on top of its event scripting system when I finally came to my senses and thought, "yeah, I can do better than this." So I fired up Delphi and started working on building a clone of RPG Maker that would have a more powerful script engine.

    That was almost 10 years ago. I got out of college and couldn't find a job in the field, so I took whatever I could, living at home and keeping my expenses down, until one day, while poking around on a Delphi forum, I saw an ad for a Delphi position, and when I looked up the company, it turned out they were only about 20 miles away! I'd never done this before, so I just went to the office, walked in and asked if I could speak with HR about the job opening. They didn't have any on-site HR--it was a branch office of a larger company--but I kinda lucked out; I walked in just as the development manager happened to have the only half-hour block free on his whole schedule for the day. So he brought me in and we talked over a few questions, and I did well enough that he invited me back for the real interview in a few days. I brought my computer in then, and when they asked me about my experience I showed them the game engine I was working on, and apparently I did well enough, because they hired me as a junior developer.

    About 5 years later, I was looking at building a simple Android game, but Android is severely lacking in the script engine department. So I decided to check out something I'd heard a few things about, a language called Boo that was supposed to be good at code generation, so I could write high-level scripts and then have something to churn through them and produce the low-level mechanical code to make them work well at runtime without a script engine. That was kind of interesting, but I ended up discarding that as I got more interested in the details of how Boo metaprogramming worked. I started contributing fixes and minor improvements, until the language creator ended up adding me to the project as an official maintainer.

    Along the way, things hit the wall on my Delphi game engine as I couldn't get certain aspects of the scripting to work out, so I got the absolutely crazy idea to try it in Boo instead. I'd read Joel's Things You Should Never Do, Part I, about how rewriting software from scratch is a horrible idea, and I didn't want to make that mistake, so instead I found a grammar for Delphi and built a cross-compiler to translate it into Boo, which came with a bunch of warts of course, but all in all it worked surprisingly well at porting my project.

    The Boo compiler is designed to be extended, which makes it ideal for a game script engine; I can add little things into the compiler pipeline to customize its behavior and make scripts integrate well into the rest of the game engine. So I'm still working on that. Along the way I ran into a race condition in the scripting that I had no good way of resolving as long as all the scripts were running on separate threads, so I ended up implementing async/await in Boo so I could bring all the scripting into the main thread in a clean, non-blocking way. I guess the old saw about open-source developers scratching their own itches has a lot of truth to it!

    Along the way I changed jobs a few times, and I'm currently working in Python and Go rather than Delphi. Things are going pretty well. I started out with BASIC, thinking "I can build my own video games." It's been a long road from there, but I'm still on that today! :D



  • I'm not a programmer, though I've dabbled a bit.

    I started with a couple of programs in the backs of a couple books for my Commodore 64. I was young, so I didn't really do much beyond retype the entire thing and marvel that it worked.

    Afterwards, the only real "coding" I'd done was some minor HTML/CSS stuff for maintaining a few websites. Then, MANY years later, when I first started at the helpdesk company I work at, rules were a little looser than they currently are. I was a Level 1 tech on a helpdesk that supported about 9 different companies, each of which had different instructions on how much insurance to use and what shipping method to use in cases of laptop repair orders. I saw that it was a royal pain to remember all of that on top of the actual fixes we needed to know, so I decided to whip up a macro-laden Excel monstrosity that you could plug the requisite bits into and it would spit out most of the info you needed in an email to the customer so you could copy/paste it into an Outlook message.

    Then I got the light-bulb idea of "Well, if I can make it generate this, why can't I just make it generate an actual email instead of having to copy/paste?". I couldn't figure out how to make Excel do this, so I decided to take the core of the VBA macros and learn how to do it in actual VB, and wrote a little application that would take the same information, hook into Outlook, and auto-generate an email message with all the right bits in it. The only user interaction needed was to fill in the field and then hit Send when the message appeared.

    Strangely enough, I was able to actually get that program vetted and approved for use on the Helpdesk for the couple months that particular helpdesk still existed in our office.

    I've since tried to start learning Python for a random game-related project, but didn't get very far before the project was scrapped and I ended up getting distracted by something...



  • @dkf said in How did you start off programming?:

    I had to write my own programs for the most part, as I couldn't afford to buy games

    That’s what adverts in Your Sinclair plus blank tapes were for.



  • @mrl said in How did you start off programming?:

    QL Spectrum

    I take it you mean a Sinclair QL? I used to know someone online who used one of those into the late ’90s at least — or at least kept going on about how much he preferred it to DOS/Windows machines. And, I must say, I wouldn’t mind one for my small collection of old computers.

    my main problems with programming were: finishing the boring parts of whatever I was coding

    I have that problem with just about everything I start, whether it’s programs or something else. Bought myself a T-shirt from ThinkGeek once that said “I never finish anyth” for exactly that reason.



  • My first experience with a computer was with a TRS-80 circa 1979 at school. I don't actually remember when I started writing programs in the BASIC of the day, but it wasn't long. By 1981 I had a Commodore VIC-20 at home to continue what I was doing at school.

    The computer classes were not a regular class, but an "enrichment" activity that basically stole time out of our other classes periodically to cram in extra subjects at the Gifted and Talented elementary school program I was in at the time. I don't think we actually got graded on this, at least not anything that appeared on our report cards, but the teacher knew who was doing well. By 1982, I was part of my school's computer programming team, and we went to one annual local programming contest (later on there were two of these) where we did well (winning in some years). They had so low a budget for these contests that they gave us one lousy trophy to be shared by the team, so we passed them around; I ended up with two or three of the trophies we earned over the various years on through high school with largely the same teammates.

    The VIC-20 didn't last too long, so around 1983 I got a TI 99/4A, which by that time was also a computer I had available at school. The school's, though, was the familiar silver and black one, while the one I had at home was the beige model TI made in preparation for launching a line of more powerful versions before instead scrapping their whole home computer division and cutting prices deeply to quickly get rid of the inventory. For what it's worth, the TI never broke, though by the time I went off to college it had become a useless toy and I used other real computers. I played Blasto on it the summer after my freshman year of college; that was the last it was used for anything.

    In high school, there were actual for-credit computer classes, even a required credit to take one. To satisfy that computer credit, there were two classes available:

    • Computer Math, which was actually BASIC programming (they used the Apple IIe which was woefully out of date by then)
    • a business computing class that taught how to use word processors and very rudimentary use of spreadsheets (no real programming)

    By that time I knew everything that was covered in the Computer Math class and the teacher (who was also my coach for the programming team) knew it. I held off until my senior year completing that credit, in hopes that a proposed advanced computer class (which would have taught us about compiled languages as opposed to BASIC) would come to be, but it didn't happen. I ended up enrolled in the regular Computer Math class and, instead of the regular curriculum, she had me learn Pascal from a book using a compiler for the Apple IIGS which was located in the library, which was reserved for me during her class hours the whole term. As a result, I didn't even attend her class most days, only occasionally to turn in work to show my progress. I don't know if the IIe wasn't capable of supporting such a compiler, or if this was a ploy to allow me to learn away from the distraction of whatever else they were doing in class.

    In any case, I finished the lessons in the book before the school year was over, and spent the last bit of the year back in her classroom, writing a text-adventure game in Apple BASIC with a map loosely based on the school at the time. Winning the game required obtaining three keys, one of which was inside a computer located in the computer room - in the right spot on the map - and the key had to be obtained Zoolander-style, more than a decade before that movie hit the screen. It wasn't much of a game, but I did turn in a playable version of the game as my last work in the class, though whether my teacher ever played it, I don't know.

    With a single exception when I once encountered some Pascal code later in life, that was the last time I did anything with the language, though the principles provided a good framework for learning Fortran and subsequently other languages in college.



  • @benjamin-hall said in How did you start off programming?:

    THinking about it, my first real programming was for the TI-85 (second only to the TI-86 for the best calculators ever made, and you'll take it from my cold dead hands) in high school. My calculator is older than most of my students...

    My daughter used my TI-85 for a while in high school but the screen basically died. Over time we had to keep turning up the contrast even with fresh batteries until eventually it gave up the ghost. :sadface:


  • kills Dumbledore

    @masonwheeler said in How did you start off programming?:

    I started out with BASIC, thinking "I can build my own video games." It's been a long road from there, but I'm still on that today!

    If I'm reading that right, you haven't actually managed to build a video game yet


  • Impossible Mission - B

    @jaloopa Yeah. I got sidetracked along the way with stuff that actually puts food on the table :P



  • @boomzilla said in How did you start off programming?:

    @benjamin-hall said in How did you start off programming?:

    THinking about it, my first real programming was for the TI-85 (second only to the TI-86 for the best calculators ever made, and you'll take it from my cold dead hands) in high school. My calculator is older than most of my students...

    My daughter used my TI-85 for a while in high school but the screen basically died. Over time we had to keep turning up the contrast even with fresh batteries until eventually it gave up the ghost. :sadface:

    I mourn for your loss. Mine is still going strong after 18 years of use and many battery changes. It's my <gollum voice>PRECIOUSSSSSSSS</gollum voice>.



  • @benjamin-hall My TI-85 still works fine too. Although at one point it went stone-dead, so I lost Tetris. :(

    (Naturally I can't find the serial cable to reload it, even if I had a serial port on any of my computers which I don't.)



  • @masonwheeler said in How did you start off programming?:

    I still remember the :wtf: moment when I first discovered that / in C doesn't give the correct answer if both operands are integers!

    :pendant: It did indeed give the correct answer. Just not the answer that you expected...

    @masonwheeler said in How did you start off programming?:

    Our final project in the class was that we had a week to build a game. Most people tried something really simple and textual. I was a bit more ambitious; I looked up some stuff on Mac graphics and tried to build a game of Tetris. I got it about 80% done, too, but I kept getting stuck on a glitch where falling pieces, under certain conditions, could cause blocks that were already in the well to get erased. I never managed to fix that one in time.

    I had a pretty decent little Tetris program that I wrote. I should make a video.


  • Impossible Mission - B

    @anotherusername said in How did you start off programming?:

    :pendant: It did indeed give the correct answer. Just not the answer that you expected...

    No, it didn't. Any answer to "five divided by two" other than "2.5" is not correct, period.

    Once again, this is one of the things that Pascal got right before C got it wrong. The / operator will always give you a floating-point value; if you want a special-case operation known as integer division, which is often useful but emphatically not the same thing as mathematical division, you use the special div operator to make it explicit that that's what you want.

    Python started out with this mistake, mostly because it's implemented in C, but it didn't take too long for the Python implementors to realize what a massive :wtf: that is, and so they fixed it. Now / always gives a floating-point value, and the special // operator is used for explicit integer division.


  • area_pol

    @hardwaregeek said in How did you start off programming?:

    @mrl said in How did you start off programming?:

    my main problems with programming were: finishing the boring parts of whatever I was coding

    You are not alone in this. :wave: I find this particularly problematic when I make a serious effort to actually engineer a significant (hobby) project and start with all the structural glue, but get bored before I get to the parts that actually do whatever interesting thing I set out to do in the first place.

    Yeah, that still is a problem for me. I have many unfinished projects that I lost interest in halfway through. Sometimes it's the boring stuff before I get to the interesting part, sometimes interesting part is done and I have no interest to code proper UI, or working configuration solution, etc.

    @gurth said in How did you start off programming?:

    @mrl said in How did you start off programming?:

    QL Spectrum

    I take it you mean a Sinclair QL? I used to know someone online who used one of those into the late ’90s at least — or at least kept going on about how much he preferred it to DOS/Windows machines. And, I must say, I wouldn’t mind one for my small collection of old computers.

    Oh, yes, the correct name is Sinclair QL, I always call it QL Spectrum, don't know why.

    I actually still have two of them somewhere in my basement, english and german version. I don't know if they still work.

    I have that problem with just about everything I start, whether it’s programs or something else. Bought myself a T-shirt from ThinkGeek once that said “I never finish anyth” for exactly that reason.

    Same here. Tons of cool things started and never finished. I feel bad about all of that.
    But I'll finish it, someday. Yeah, not really. Probably never.


  • Discourse touched me in a no-no place

    Let's see. Second grade. Apple IIe. At the time, the curriculum said "x hours of computer", with the various teachers left to figure out WTF to make of that.

    One of them decided Logo was a good idea. It was.

    Third grade, I appeared in a training film for Gopher in schools (on the Macs in the library) and developed an interactive hypercard (paging @blakeyrat to let him know that I, too, think early Mac was rad as fuck) app explaining... Something technical. Maybe it was the Internet? I don't recall.

    At some point in about fourth grade (by which time the whole computer lab had been replaced with Macs and the old Apple II's whacked in an adhoc lab in the hallway, I found myself and one other nerdy kid banished to those Apple II's for reasons I cannot explain instead of having an actual class. We didn't even have a teacher. There was a Lego Technic kit with a goddamn MIT Media Lab programmable brick (this predates the official Mindstorms line) there, which on the Apple II used some sort of line numbered variant on logo. I suspect my mother, who was a professional volunteer (effectively an unpaid teaching aide) at the time, had something to do with this, and it was probably getting me out of some class she objected to, though I am unable to find any holes in my education.

    Middle school was awkward and miserable. I learned Excel.

    High school, I effectively got drafted as the system administrator and hardware tech for the A/V lab. That teacher was the single most formative person in my entire life. Never wrote a line of code, but I picked up the foundations of most of my other practical tech knowledge.

    Junior year, I took the two courses in the AP Comp Sci progression. This was the first year for APCS in Java. I muddled through and did okay on the (harder) AB version of the test. This teacher was my second biggest formative influence because, after the AP test, with 2 months left in the semester, she put us to work building a software replacement for an obnoxious, daily paperwork task that consumed an entire vice principal.

    Against all odds, we succeeded. The following year, she arranged for myself and one other guy, plus a couple of chicks from the field hockey team for data entry, to effectively sysadmin and maintain the system. Our first periods were all swapped out for some sort of made up bullshit and we earned A's simply for existing. Woo.

    Oh, and the nature of the solution meant I was exempt from ever receiving a system generated disciplinary summons for skipping classes and study hall. See, there was this bug, right?

    Nonetheless, I thought myself to be a middling at best programmer, and picked a college program that focused on the design side of software and systems engineering. There were more programming classes and, as time went on, I discovered I was actually really fucking good at it compared to my peers. I was development lead on our class senior project, which was a real development gig for custom software for a real client. I subsequently got paid to administrate the thing when it was used in production.

    I still think I'm pretty shit, and everyone else has no fucking excuse for being even worse.


  • Impossible Mission - B

    @weng said in How did you start off programming?:

    Against all odds, we succeeded. The following year, she arranged for myself and one other guy, plus a couple of chicks from the field hockey team for data entry, to effectively sysadmin and maintain the system. Our first periods were all swapped out for some sort of made up bullshit and we earned A's simply for existing. Woo.

    Oh, and the nature of the solution meant I was exempt from ever receiving a system generated disciplinary summons for skipping classes and study hall. See, there was this bug, right?

    @weng = Conte Mark ???



  • Ok, so here's the Tetris program. (More specifically, a video of me repeatedly fucking up while playing the Tetris program.)

    Technically it's one of the Tetris programs, but it's probably the better out of the ones that I wrote.

    The funky way that the edges of pieces disappear was intentional. It's merely graphical and has no effect on the way the game actually plays.


  • Notification Spam Recipient

    @anotherusername Is this merely graphical, too, or does this have an effect on gameplay?

    This would be the blakeyrat school of video production.



  • @mrl said in How did you start off programming?:

    Oh, yes, the correct name is Sinclair QL, I always call it QL Spectrum, don't know why.

    Maybe because it looked like a Spectrum+ or 128?

    I actually still have two of them somewhere in my basement, english and german version. I don't know if they still work.

    If they did when you put them away, I have a feeling they still will. Assuming they didn’t get soaked or anything, anyway.

    Same here. Tons of cool things started and never finished. I feel bad about all of that.

    I don’t, as a general rule. I’ve come to accept that it’s just the way my mind works: when something catches my interest sufficiently I’ll put a lot of effort into it, then it’ll trail off when the exciting or interesting bits are done, and will grind to a halt sometime after something else becomes sufficiently interesting. But worst of all: if I come back to one of these things one, two, five, ten, or more years later, I usually still know what I originally intended it to be or do.


Log in to reply
 

Looks like your connection to What the Daily WTF? was lost, please wait while we try to reconnect.