I thought it would be fun to learn about everyone's roots in programming, so I made this forum, anyway, here's mine, feel free to respond with yours. My first programming language was [url]scratch.mit.edu[/url]. It is a block programming language and how I learned was when I was 7 years old, my school had people from SparkFun teach us how to code. I was little and thought that coding was one of the coolest things because of the matrix and what not. But only a few kids could be part of this demonstration, and if you wanted to, you had to write a paper on why they should chose you, and I wrote "Because I know binary" (I kind of lied when I said that, all I did was read about ascii in a book) And I got in. Surprisingly enough, these people didn't have much experience with programming themselves, because they didn't even mention variables
(Probably because we were only in 2nd grade and that was a future math concept) And basically, I just dragged blocks and made programs that way.
BASIC on a VIC-20 or Logo on an Apple 2e. I'm not entirely certain which.
Logo on Apple IIe, then BASIC on Apple IIe, then HyperTalk on a Mac, then assembly language on Apple IIe, then C on a Mac (briefly), then QBasic on an MS-DOS PC, then Turbo C (briefly) and DJGPP on an MS-DOS PC, then assembly language on NES, then C++, Scheme (briefly), Java (briefly), JavaScript, PHP, and Python on a Windows PC, then WarioWare DIY (Nintendo's attempt at making Scratch, I guess) on Nintendo DS.
That's fun you started with Scratch; so did my nephew. He's on to Pico-8 now
. I started with QBasic in 1996 or so, at age 13.
GradualGames wrote:
I started with QBasic in 1996 or so, at age 13.
It appears we're the same age and started programming around the same time using the same tool, because my answer is EXACTLY the same.
My first exposure to programming was Fortran IV in college in 1978, but no useful depth yet. My first real programming was on a TI-58c calculator starting in Dec '81, followed soon after by 6502 in a class in the spring of '82, concurrent with a Fortran IV class.
Garth wrote:
My first exposure to programming was Fortran IV in college in 1978, but no useful depth yet. My first real programming was on a TI-58c calculator starting in Dec '81, followed soon after by 6502 in a class in the spring of '82, concurrent with a Fortran IV class.
Wow. What computer did you use for Fortran IV, I know that computers like the Apple II and Commodore PET existed, but did you have to use a computer the size of a room?
GradualGames wrote:
That's fun you started with Scratch; so did my nephew. He's on to Pico-8 now
. I started with QBasic in 1996 or so, at age 13.
Yeah, I loved scratch, at one point I tried programming a full fledged RPG using that language. sadly, Scratch just wasn't up to the task. It was extremely laggy, and it often times crashed my browser. But it was still a good language to get me started with programming. I remember when I came up with how to use variables on my own, it went like this: I wanted to have money in the game. And then I remembered about these things called variables and thought, "What if I had a variable for how much money I have" And sure enough, it worked. I could go on about this story, but it's probably pretty boring so I'll just stop there.
I started out playing with The Games Factory's event-based programming, and then learned Liberty BASIC after that, and C after that. I was actually exposed to Pokemon Mini's architecture (S1C88) before I played with the 6502.
1. Logo in some elementary summer course. Didn't know whether the centre used Apple ][ or any other computers bitd.
2. BASIC in some elementary summer course on PC-88.
3. BASIC on Apple ][, via reading books and experimenting at home.
4. Basic (heh) 6502 assembly on Apple ][ (via reading books, that never worked out). I also managed to learn why most of my graphics hacks of FDS games usually only worked on Side A but not Side B, to no avail, partly due to the disassembly tool I had at the time using awkward mnemonics for the 6502 opcodes, such as using JZ instead of BEQ (and I eventually found out more than two decades later that the reason the hacks not working was because of hidden last files on the disk).
5. dBase in some elementary summer course... yeah.
6. VERY basic Pascal in University.
7. VERY BASIC C++ in University.
8. VERY BASIC
COBOL in University.
9.
AGS.
10. Some x86 assembly.
11. Revisited 6502 assembly, so I could finally make something that seemed to work on Apple ][ and Famicom.
12. Revisited C++.
And more of those other languages that I had dipped a bit into but not quite using.
I wasn't meant to post all these. Just that I'd want to say that I had previously touched
COBOL.
I WISH THAT NEVER HAPPENED!1!...yeah. All these
BOLD, ITALIC, UNDERLINE and CAPS are necessary.
I also started with QBASIC in the mid-90s, around the age of 7. That's the age I started coding - I was staring at books on BASIC since before I could read. I can legitimately call myself a native programmer.
I quickly migrated to Turbo C++ and then flat assembler (x86), which I used to write a Forth OS, before DOS died and I drifted away from programming for a few years. After I switched from Windows to Linux I picked up GCC, which I've been using ever since.
Plus a bit of Java for a Minecraft mod I never published, back when it was still a decent game.
My grandma exposed me to FORTRAN and COBOL but only had the means to show me the concept, she had a box full of programming sheets and we sat and wrote in them with no computer to test it on. I'm sure i never did anything useful but it sparked my interest. After that summer, i borrowed every book on BASIC at the library and read them and copied example code to paper and began to write small programs on the same. Those books were for ABC80, ABC800 and Commodore 64.
I then got a 286 with qBasic off the trash bin at mothers' work and finally got to program on an actual computer. Learned how to make batch files by this time too. qBasic is the first language i got to properly learn.
My grandma got me a subscription of a webdev magazine by christmas '96 which was my primary source for learning HTML and JS.
1988 BASIC V2 - C64 was my first. I also got LOGO that year, but LOGO not that useful for things.
1990 6502
1998 68K/65816 as well
1999 x86
2000 C/C++
2005 I also picked up C#
I did a bit of some type of BASIC in a high school computer course in the mid-'90s. Didn't really grab me. It seemed too high-level, like it was hiding the details of how the computer worked from me, and I found it vaguely annoying.
I had to learn C++ in college as part of my first year of engineering. But only the first year. After that it was several years of nothing but Matlab. I only got back into C++ at the beginning of my Ph.D., and I still like Matlab better.
I never seriously considered learning any sort of assembly language before the spring of '14, when I started my current SNES project. In fact, my first thought was to ask somebody on NESdev to program the game for me, but I abandoned that idea as a likely lead balloon...
DementedPurple wrote:
Garth wrote:
My first exposure to programming was Fortran IV in college in 1978, but no useful depth yet. My first real programming was on a TI-58c calculator starting in Dec '81, followed soon after by 6502 in a class in the spring of '82, concurrent with a Fortran IV class.
Wow. What computer did you use for Fortran IV, I know that computers like the Apple II and Commodore PET existed, but did you have to use a computer the size of a room?
Yep, and absolutely no graphics (unless you could print it on greenbar fanfold paper with text characters).
My early interest in electronics (1970's) was in stereo and amateur radio, not computers. Remember the line in the movie "Pirates of Silicon Valley" where the executive, puzzled and tapping his pencil on the desk, said slowly, "What would the common man want with a computer?" (They must have had some good laughs making the movie.) Back then, computers were rare, huge, and expensive, and people who worked with them seemed next to God or something.
I've been inactive in amateur radio since 1984, but I've maintained my license only in case I'd want to make my own radar or missile-guidance system to take out an ice-cream truck or something exciting.
I got mildly interested in computers when I wanted to do audio and RF circuit calculations that took thousands of iterations. I got a TI-58c programmable calculator in Dec '81. The next year, I took a class on 6502 which used AIM 65 computers, and a Fortran IV class which required doing our practice on the school's IBM 360 mainframe computer. You'd transfer your hand-written program onto cards at a big card-punch machine so the dresser-sized card reader could accept it, then rubber-band the cards together with a paper having your account number and put it in a cubby, and come back two hours later for a printout of all the reasons it wouldn't run.
By then, the boys who had access to an Apple or TRS-80 or similar were using BASIC, and assembly if they were more adventurous; but the school was behind the times. It reminds me of the 1969 movie "The Computer Wore Tennis Shoes" where Medfield College was given its first computer, free, because the computer (
apparently a Burroughs B205) was already so outdated.
re: punch cards
I had the privilege of making punch cards last year. Though, the instruction set for a jacquard is a lot simpler; it's basically just one: "toggle bit at address n", which is carried out completely mechanically in older models.
Punch cards readers for wheft were eventually replaced by light/dark optic sensors so textile industry designers could fill in patterns manually on paper. This seems to have been the mode of graphics design over at nintendo at an early point, too. The format is similar; you'd have graph papers representing bit planes and a string representing the (i don't know the proper english technical term for this) färgställning* (roughly meaning colour setting) which is analogous to how you'd assign subpalettes via the attribute table on the PPU of the NES. Different machines have different configurations, but i believe the most common was just one bit plane toggling between two subpalettes, because it's mechanically the simplest thing you can get away with.
We also prototyped an electronic punchcard reader for an exhibition.
*found it: farbstellung (german) is apparently "colour combination". Anyway it's meant to be an instruction comprised of what colour codes (representing spools) goes into what subpalette.
Mine was GameSalad... not that it is a language... but it was the tool I used to make my first game. I then studied C/C++, so I guess C was my first language. When I started using Unity I coded in JS. I did do SOME BASIC on C64 as a kid but VERY little...
My first language is C++
. They taught in highschool.
When I was 6 I found a wonderful book at my school library called "Computer Fun" which aimed at teaching BASIC to kids.
There's actually a free PDF of the book available, along with a number of other books in the series:
https://usborne.com/browse-books/features/computer-and-coding-books/From those books, and also by typing code listings out of magazines, I learned BASIC on my Atari ST. (ST BASIC dialect, then GFA BASIC.)
Later when we got a 286 with MS-DOS, I started using QBasic.
Incidentally, I was always frustrated trying to make games with QBasic and GFA BASIC because neither seemed to have a masked blit command, which I thought was essential! I tried writing my own, looping through and setting pixels one by one, but that was never fast enough on my CPU to be useful. Years later I learned that you could do an AND blit with an inverted mask followed an OR blit to accomplish what I wanted, but I'd never found an example of this back then when I needed it! I read everything I could get my hands on, but there was a lot of limitation on what I could find. For example: I wanted to learn assembly language, but the only book my local library had on assembly language programming was written in the 70s. I tried reading it, but it was terribly confusing, and for a type of CPU I've never seen in real life. Even at the bookstore there was hardly anything available on these topics.
Still later we had a Pentium, and Visual Basic, which I was frustrated by because I couldn't figure out any sensible way to make video game graphics with it. (It might have had one, but all the documentation I had was more about making windows forms.)
In 1997 I got home access to the internet, and things just exploded for me. I found the
DJGPP compiler (DOS port of GCC), and the
PC Game Programmer's Encyclopedia. I learned C and x86 assembly, and with the internet suddenly had access to all sorts of great information that had been difficult for me to find before. I could even talk to other people who were interested in this stuff! It was amazing.
After 10 years of trying to learn from whatever scraps I could find, the internet gave me easy access to everything I needed to know!
I don't think I'd recommend starting with BASIC today, but really I think almost any language is OK. Probably I'd suggest Python as a starter language, but it's more about what guides/tools you have available and what you're trying to make. I learned BASIC first because I happened to find those particular books that used BASIC.
I spent some time with DJGPP and Turbo C as well, ~1999 or 2000. I think I wrote a missle command clone, a connect 4 game (with a min max algorithm I borrowed from somewhere, I didn't really understand recursion too well at age 15 lol)...and maybe some demo or other with Allegro's 3D primitives. Nothing too fancy. Probably the best thing I made in that "era" was a raycaster in visual c++. I still have it around somewhere but it crashes when I run it. lol.
I recall a clone of Final Fantasy somebody was making in DJGPP/Allegro and it had rather well written mod/st/s3m whatever music in it. I wish I still had that around, it was inspiring to me at the time. I don't remember what it was called or where it went.
Ahh the good old days. Actually in my case I'd say bad old days. I sorta quit programming ~2001 or so and didn't really start again til after college. How I was able to land a CS degree without doing programming for 4 years is anybody's guess. I probably wrote some shit code that got A's from professors who didn't give a crap often enough that it got me by, plus 17+ credits of straight A's in piano lessons, which I found easy for some reason.
tokumaru wrote:
GradualGames wrote:
I started with QBasic in 1996 or so, at age 13.
It appears we're the same age and started programming around the same time using the same tool, because my answer is EXACTLY the same.
Cool. Wonder if we crossed paths on any qbasic websites? Haha. I used to frequent QB RPGs mainly. I wish I had saved a mirror of the site, I can't find it archived anywhere. Luckily I still have a handful of RPGs a few folks made from back then, whenever I feel like going down memory lane.
Pretty sure my first exposure to programming was BASIC in middle school.
I remember making a a stick figure guy walking across some ground and getting struck by lightning. Heh.
rainwarrior wrote:
Still later we had a Pentium, and Visual Basic, which I was frustrated by because I couldn't figure out any sensible way to make video game graphics with it. (It might have had one, but all the documentation I had was more about making windows forms.)
This, so much. They had visual basic installed on a computer at school, it was clearly (in my experience then) aimed at making small widgets, and the only "useful" thing that i made out of it was an auto dice roller with a windows form interface.
I think python is the new qBasic, except i don't expect a school kid wants to make a text based adventure to show their friends these days.
But it's at the same time more useful as a tool maker, too.
FrankenGraphics wrote:
I think python is the new qBasic, except i don't expect a school kid wants to make a text based adventure to show their friends these days.
But it's at the same time more useful as a tool maker, too.
Yeah python is incredible for tools. I use it to glue together my whole nes coding process. I use it to build the game itself (clarification: I mean a script to build the game, which is written in 6502), famitracker conversion, a graphics and level editor using PyQt (that was REALLY fun to build) which I'm still using and improving 3 years later, random scripts for generating charmaps, trig tables, and maybe other stuff I forgot. *edit* oh yeah, a .nl generator for fceux from ca65 listing files...
As for the new QBasic, I'm gonna make everyone hate me by plugging
Pico 8 again.
Self contained dev environment and full of easy to use primitives just like qbasic. Probably not quite as versatile though. It does everything I'd wanted to do as a kid with game development, though, including constraining scope. I wish I could go back in time and tell my 14 year old self: "Derek, I think you're biting off more than you can chew trying to make a SNES style QB RPG with so little experience. Why don't you dial it back a bit and make something you can actually
FINISH."
Quote:
"Derek, I think you're biting off more than you can chew trying to make a SNES style QB RPG with so little experience. Why don't you dial it back a bit and make something you can actually FINISH."
Heh yeah. My first game, written at the age of 12, had like ten rooms, and about five things to do in each. I should've stuck to that concept for a lot longer. Most things done through the school years after that became mere concepts and demoes with too grandiose ideas behind them.
GradualGames wrote:
Cool. Wonder if we crossed paths on any qbasic websites?
Maybe, but I was pretty quiet back then. In the beginning I didn't even have internet at my own home, I'd go to my father's on weekends and spend all night from saturday to sunday downloading QBASIC programs to play with and learn from... I didn't really talk to anyone. I spent months analyzing a crappy raycaster (really slow, with 4-pixel wide textures that only scaled vertically - I loved it!) I downloaded during one of these visits.
Quote:
I used to frequent QB RPGs mainly. I wish I had saved a mirror of the site, I can't find it archived anywhere. Luckily I still have a handful of RPGs a few folks made from back then, whenever I feel like going down memory lane.
RPGs were never my thing, so it's no surprise I don't remember this site. I'm sure I visited it at some point, I was ALWAYS looking for new QB stuff, but I definitely didn't frequent it. I'm having a hard time remembering the names of ANY sites from back then, actually, but the main thing I did was scroll through those long tables of BAS and ZIP files with short descriptions downloading anything that looked remotely interesting.
Yeah Garth, I think that the TI-58c was the one if not the first machine Satoru Iwata programmed, just a little trivia for you.
rainwarrior wrote:
I don't think I'd recommend starting with BASIC today, but really I think almost any language is OK. [...] I learned BASIC first because I happened to find those particular books that used BASIC.
Although none of the BASICs I've used were on a 6502 machine, I understand the BBC BASIC was really good, and I was impressed with Lee Davison's EhBASIC when I looked over its capabilities years ago. It looked really good considering the memory limits of the '02. I expect that if modern tools were used and more advanced knowledge of what can be done on the '02 were applied, someone could come up with a further improved BASIC. I wouldn't mind seeing BASIC make a comeback in that way. It would be more structured, possibly compiled and using labels and no line numbers, allow local environments, multiple programs in memory at once, etc..
Garth wrote:
rainwarrior wrote:
I don't think I'd recommend starting with BASIC today, but really I think almost any language is OK. [...] I learned BASIC first because I happened to find those particular books that used BASIC.
Although none of the BASICs I've used were on a 6502 machine, I understand the BBC BASIC was really good, and I was impressed with Lee Davison's EhBASIC when I looked over its capabilities years ago. It looked really good considering the memory limits of the '02. I expect that if modern tools were used and more advanced knowledge of what can be done on the '02 were applied, someone could come up with a further improved BASIC. I wouldn't mind seeing BASIC make a comeback in that way. It would be more structured, possibly compiled and using labels and no line numbers, allow local environments, multiple programs in memory at once, etc..
Yeah, BASIC is my all time favorite programming language, it's a lot more simpler then any languages in the C family, that's for sure.
DementedPurple wrote:
Garth wrote:
rainwarrior wrote:
I don't think I'd recommend starting with BASIC today, but really I think almost any language is OK. [...] I learned BASIC first because I happened to find those particular books that used BASIC.
Although none of the BASICs I've used were on a 6502 machine, I understand the BBC BASIC was really good, and I was impressed with Lee Davison's EhBASIC when I looked over its capabilities years ago. It looked really good considering the memory limits of the '02. I expect that if modern tools were used and more advanced knowledge of what can be done on the '02 were applied, someone could come up with a further improved BASIC. I wouldn't mind seeing BASIC make a comeback in that way. It would be more structured, possibly compiled and using labels and no line numbers, allow local environments, multiple programs in memory at once, etc..
Yeah, BASIC is my all time favorite programming language, it's a lot more simpler then any languages in the C family, that's for sure.
Perhaps you'd be interested in
FreeBASIC. I was also going to provide a link for BlitzBASIC, however their site appears to be down at the moment.
As far as just typing code goes, probably BASIC on the TSR-80 Color Computer we had. Good old times spending an hour typing code for a game listed out in a book, only to realize the code is wrong and doesn't compile. And when you're ~8 years old and know nothing about programming, your odds of actually correcting the code are pretty slim
First thing I wrote on my own was in QBasic, on a 286 around 1995. The first "big project" I remember making with it was an "RPG" with ASCII graphics mixed with drawn shapes in QBasic - I'm sure I still have a copy of that on a floppy disk somewhere...
Then I moved on to C/C++ with DJGPP & a FF4 "clone" on a Pentium. I also ended up making some sort of AD&D "game" in Visual Basic, and later on a Ragnarok Online (Beta 1) server emulator in VB6 (which I ended up rewriting in C)... Out of all these, only the RO emulators were actually complete to a point where they could be useful.
I think that pretty much sums up the main projects I did before I entered college, various smaller things aside. In contrast, I've probably spent an order of magnitude more time on Mesen than all of those projects put together, though.
If I had to pick favorites today though, I'd say C#, Typescript and C++ (probably in that order?)
Connecting into the internet and searching "how to make programs" on google started me on this wonderful lifelong journey.
C++ on my own trying my best to do text based games... and failing miserably
C# with moderate success (plus it allowed decent control over terminal caret and individual character bg/text colors)
6502 Assembly (which I love)
Then comes university and I learn C very quickly and a lot of good scientific basis for everything computer programming.
A little bit of Java (which I hate not because of the language but because of OOP + Software Engineering)
It was an ok path even if there was a lot of error in between trials
If I were to recommend a 1st language it would be something high level first (python?) but with a reminder to learn low level stuff later. If the person asking was a turbo nerd like myself I'd just recommend C with a library like Curses to do fun stuff. Maybe even NES/6502 if he's really into old video games.
I started with Commodore 64 BASIC. I started off typing in examples from the manual and magazines, but the projects I remember making myself were utilities and applications instead of games.
I made a menu program for my collection of games. You'd select the game name from the menu, then it'd prompt you to insert the correct disk and check for the existence of the expected file name. If the file didn't exist, it would re-prompt you to insert the correct disk. If the file did exist, then it'd load and run the game.
I made a simple family tree explorer. It would show one immediate family of parents and their children at a time. You'd highlight a person and press a key to toggle between them being a child or a parent in the view. For example, if it started with my dad and mom at the top and my siblings and me underneath, I could highlight my dad, press the button and the view would change to show his parents (my grandparents) at the top and he and his siblings (my aunts and uncles) underneath, with his name still highlighted. You'd then move the highlight and swap the view to explore further.
The most ambitious thing I made for the Commodore 64 was an 80-column RS232 communications terminal in assembly. Because the Commodore 64 only has 40 columns, I flipped between two screens of half-width characters, one page with the odd characters on the left side of each cell, the other page with the even characters on the right side of each cell. Once I got it working, I remember ultimately being dismayed with it. The letters were hard to read since they were only 3 x 7 pixels, and the screen flipping flicker made it worse. It was a lot of work for a not very useful result. However, I was pleased with the nice bell sound I programmed to play when a bell character (Ctrl+G) was used.
I started with Visual Basic and Commodore 64 BASIC almost simultaneously when I was about 12 years old. However 6502 assembly is the 1st "language" in which I did relatively "advanced" things.
65816 assembly in 2014 when I was 15 years old.
Espozo wrote:
65816 assembly in 2014 when I was 15 years old.
Probably the worst first programming language to learn.
I learned Apple Basic, 6502 ASM around 88-92. We got a IIgs, but I never learned 65816 anything.
In college they made me learn Pascal. Later I took some web design courses and learned some basic JavaScript.
After playing around with FCEUX, to cheat at games, I figured out that NES games were programmed in 6502 ASM...which I already knew. I made a few hacks, for fun.
I think I heard about Nerdy Nights somewhere, and made Purple Cape Man. Only since then did I properly learn...
C/C++
Python
C#
JavaScript/Jquery/CSS/HTML5
I was going to make a web game, but I really don't want to now.
My first was QBASIC when I was 15 or so. I could have started sooner but I had no idea that games were programmed or that programming existed at all until I stumbled upon a programming book about BASIC, Pascal and FORTRAN. Then I remembered there was a text editor in DOS directory on my computer that didn't let me type what I wanted and things clicked and my programming ventures started hahaha. My first real program was a number guessing game that I pretty much copied from the book while giving it my own twist.
Internet wasn't quite a thing in my life yet at that point either, but later I got some access to that and quickly discovered QuickBASIC 4.5 which allowed compilation and was generally faster, but not fast enough for a nice 2D sidescroller and then the next important name I found was called "assembly". I learned x86 assembly and finally managed to get some 2D sidescroller going, but I never managed to finish anything, drawing took a while and my young mind wasn't able to come up with all the needed things. I had made a graphics editor and some sound tools at that point.
A bit later I built a
SRAM cart so I could run ROMs on my Mega Drive and then I decided to learn how to program the thing. Being proficient in BASIC I tried BasiEgaXorz but that was very limited and nowhere near the level of QBASIC even so 68K assembly was the next thing, and woooooow, that thing blew my mind, so much nicer than x86 ! It only took me couple days to learn most of it and not long before I had graphics on the screen of my TV running off my SRAM cart haha. Z80 assembly came next as I needed means to play sound without tying up the main CPU. It was much more painful than 68K which pretty much had spoiled me. x86 still felt worse though... Nowdays I also do Master System and SC-3000 / SG-1000 stuff, whole game in Z80 isn't actually all that bad.
At some point I learned SuperH-x assembly so I could do 32X stuff but didn't get super far. That CPU is weird, but only because of fixed 16bit instruction size, you're doing a whole lot of relative accessing to get something going, code and data intertwined around. Super fast thing though and not all that terrible to work with once you get used to the implications of fixed instruction size.
Then came the time to put QB45 to sleep as the programs I wanted to do grew too big for it. FreeBASIC was the next thing and that's something I use as primary thing to this day. Pmode DOS was very limited so I dropped that and went on with Windows. WinAPI was a huge PITA at first but now I'm fluent in it and it isn't super hard to get going somewhere.
At school I had to do Pascal but I didn't like the syntax one bit, C, C++ and C# were same deal, I cannot stand the syntax. VisualBASIC was more at home but I didn't do anything serious in it and haven't messed more with it to this day. I will have to do C at some point when I start writing some drivers for windows, not looking forward to that at all, I'll probably write some sort of translator to get FreeBASIC to C going because I really cannot stand C and likenesses haha. It is also why I'll never work as a programmer hahaha.
I also know AVR assembly and Texas instruments C54x and C55x DSPs. The latter two are absolutely horrible, 65x is great compared to those DSPs as far as assembly goes haha, making a NES game is lot less headache than something serious on those DSPs (but you are supposed to use C with those, and endure the absolutely terrible IDE). I don't have any desire to learn PIC, gonna stay in the AVR camp haha.
I had almost no access to home computers as a kid, but I grew up playing video games, and always wanted to make my own games one day. My first programming experience was with RPG Maker 95 and 2000 for Windows back when internet started becoming a thing and we finally had a PC. RPG Maker didn't have any scripting language back then, so you programmed solely by selecting commands by clicking on buttons in a GUI. At first I was disappointed how limited it was because I couldn't do everything I wanted to, but by examining other people's RPGs I realized how powerful it really was.
My first real programming was with C++ in high school. My experience in RPG Maker made things much easier because I had already started to understand how you are supposed to think. I also learned some Ruby (because RPG Maker XP used Ruby as a scripting language) and Quick BASIC at one point.
Since I suck at math I didn't do programming in university though, and went with Japanese instead (which was another childhood dream of mine). I did take a few university courses to improve my C++ though, and some in electronics.
Then one day I decided that I wanted to make NES games. I wanted to start make the kind of games I grew up with and I thought I rather start with my first gaming system. I did the exercises in Nerdy Nights in my spare time and didn't understand half of it. I went back to it many times though and eventually I got comfortable enough with 6502 and the NES hardware. It was still hard to make a game though because I didn't know anything about game programming.
Since then I have also learned some Family BASIC, Z80, Hu6280, 65816, PIC and JavaScript.
I think that learning these more primitive microprocessors has really improved my understanding of C++ and how computers works in general. And I like the importance of 6502 and Z80 in computer history as well. Also it's fun to brag to my friends majoring in computer science that I "know" a few assembly languages. Of course I'm much more of a newbie than they are, I just have more knowledge of more or less obsolete hardware. lol
dougeff wrote:
Espozo wrote:
65816 assembly in 2014 when I was 15 years old.
Probably the worst first programming language to learn.
I learned Apple Basic, 6502 ASM around 88-92. We got a IIgs, but I never learned 65816 anything.
Outside of the TI-58c programmable calculator, 6502 assembly was one of my first languages (concurrent with Fortran IV). Later I was able to use the 65c02 and its improvements over the NMOS '02 gave me a greater sense of freedom. Later I got into the 65816 which I actually found
easier than the '02 because its wider registers and added instructions and addressing modes removed the limits. It was so nimble at things the '02 was either clumsy at or incapable of. But if it seems daunting, you can use it exactly as a 6502 to start, and then start using the extra capabilities little by little.
Yeah well if you already know 6502, both 65C02 and 65816 will be very easy to learn, but starting with 65816 would probably be a bit harder simply because there is more stuff to learn (unless you treat it as a 6502 of course). Starting with Super NES hardware as your first programming experience sounds like a very steep learning curve though.
Pokun wrote:
Starting with Super NES hardware as your first programming experience sounds like a very steep learning curve though.
If you're doing everything yourself, sure. My first experience writing any 65xx code at all was making custom blocks and sprites in Super Mario World, which made it much easier.
Are there any language that are easier to pick up after learning a specific language? Like generally speaking or game creating.
Well learning C/C++ should get you familiar with a common syntax and other things that is common in most high level languages, but won't help too much in assembly (except fundamental programming logic like memory, flow control etc). Learning an assembly language should make it much easier to learn other assembly languages although different microprocessors can be quite different and have very different syntaxes, which may make it take time to get used to a new architecture.
I think generally the more programming (any kind) you know, the easier it is to learn other languages.
Garth wrote:
dougeff wrote:
Espozo wrote:
65816 assembly in 2014 when I was 15 years old.
Probably the worst first programming language to learn.
I learned Apple Basic, 6502 ASM around 88-92. We got a IIgs, but I never learned 65816 anything.
Outside of the TI-58c programmable calculator, 6502 assembly was one of my first languages (concurrent with Fortran IV). Later I was able to use the 65c02 and its improvements over the NMOS '02 gave me a greater sense of freedom. Later I got into the 65816 which I actually found
easier than the '02 because its wider registers and added instructions and addressing modes removed the limits. It was so nimble at things the '02 was either clumsy at or incapable of. But if it seems daunting, you can use it exactly as a 6502 to start, and then start using the extra capabilities little by little.
I think long addressing might be somewhat confusing to beginners because certain instructions/addressing mode are missing like lda $xxxxxx,y. You pretty much have to use the bank register as the bank byte for Y, and use long addressing for stuff you'd normally use absolute addressing for.
psycopathicteen wrote:
Garth wrote:
Outside of the TI-58c programmable calculator, 6502 assembly was one of my first languages (concurrent with Fortran IV). Later I was able to use the 65c02 and its improvements over the NMOS '02 gave me a greater sense of freedom. Later I got into the 65816 which I actually found easier than the '02 because its wider registers and added instructions and addressing modes removed the limits. It was so nimble at things the '02 was either clumsy at or incapable of. But if it seems daunting, you can use it exactly as a 6502 to start, and then start using the extra capabilities little by little.
I think long addressing might be somewhat confusing to beginners because certain instructions/addressing mode are missing like lda $xxxxxx,y. You pretty much have to use the bank register as the bank byte for Y, and use long addressing for stuff you'd normally use absolute addressing for.
True, not every indexed and indirect addressing mode is available in 24-bit. (Actually, they're not all available in 16-bit on the '02 either, like that there's no
LDA (abs),Y). Also, the two bank registers are only 8 bits each (the high 8 bits, specifying a bank), meaning you can't use them as fine-grained index registers. However, the '816 still gives you a ton of benefits even if you never go outside the first 64KB of address space and never touch the bank registers. Going beyond that, the thing is to make banking work
for you rather than
against you.
There's no
LDA $xxxxxx,Y, but there
is an
LDA $xxxxxx,X and
LDA $xxxxxx and
LDA [dp] and
LDA [dp],Y. Altogether there are 34 addressing modes (if you separate
RTS,
RTL,
RTI, etc.), in 255 op codes. The stack-relative addressing modes (along with 16-bit registers) open up new possibilities, and a further cool addition is that you can adjust the starting point of the "direct page" (like zero page, but you can make it start
anywhere in the first 64K), even making it overlap the stack area, so you can get direct-page addressing modes even in the stack.
Yeah and I think even if you leave it in emulation mode and treat it like a 6502, many of the new instructions still works.
What good would it be to set the stack area as direct page though? Does subroutine jumps, push and pull instructions benefit from the stack being affected by direct-page magic?
It's more for automatic allocation of local variables used by subroutines.
I started with VB....simple but it made me interested in programming
TreatmentDrug Pricesubchorionichematoma
1) TI-BASIC
My first programming language was TI-BASIC on a TI-99/4A.
It was fun as a 2nd grader to take the program listings in books and type them in, and then modify the programs for different results (colors, graphics, sounds). The manual of the TI-99 stresses there's no way to break the computer, so don't worry and just power cycle. Imagine if computers were like that now?
My interest was more in digital electronics and just playing video games so I put it on hold for a while.
2) TI-BASIC (calculators)
Then I had a stint of BASIC-like programming with the TI graphing calculators, mandatory for math class. I know I said this before but one of the most popular games floating around junior high school (a moon lander) became uncool when they realized *I* wrote it. People can be so cruel.
3) QBasic
When I finally got an IBM compatible PC, it was a Packard Bell Pentium computer. Thank $deity that buried on one of the CD's there was QBasic. I eventually was doing 3D math (line art), and then later filled (but untextured) polygons. I also figured out the math behind Mode-7 on the SNES to pull from a texture map. Also whoever came up with WAIT &H3DA, 8 for waiting for Vsync to slow down the programs (instead of a large for-loop) is a genius. I actually think it was in the help file?
4) Commodore BASIC
At a garage sale, I bought a used VIC-20. That thing was awesome and BASIC programs really flew in comparison to the TI-99. Started learning about peek and poke to really make some ridiculously cool looking effects. Downside was the 3K of memory available. Upside was the schematic and datasheets for all the chips were included!
5) 68K Assembly (no really)
Again more interested in digital electronics I built a 68K computer and hand-assembled code for it as a junior and senior year high-school independent study project. I programmed the first test EPROM on a breadboard with dip switches and jumper wires. I was smart enough to wire the write command with a debounced pushbutton. It was some dumb 5x7 LED matrix scanner, but on the matrix keypad you could use the arrow keys and pick the color of the pixel (off, red, yellow, green). I really credit how open the documentation on the VIC-20 was for allowing me to understand how to create my own computer with a different CPU.
6) Z80 assembly.
More TI-calculator stuff. Would sometimes hand-write program code bored off my ass waiting for close as a cashier. Ported the SDCC C compiler to the TI-86, my first experience with open-source. Was too dumb to commit back because I had a severe inferiority complex and didn't feel anyone would care. Lost most of everything related to this due to roommates and moving around.
At this point I'll stop, as it's beyond the scope of the question. But as an aside, I still get treated like an outsider at work for being one of the only ones to understand programming and low-level computer stuff. I don't understand why coworkers or general managers get bent out of shape if I say a seemingly small but nontrivial code writing task will take 4 days, they make me feel like I'm being dishonest or something. I don't really recommend software programming as a career due to social ostracization.
1.) I started messing around in game maker when I was around 11-12, and using whatever built-in language it had to slowly learn how to program. It would take anouther 3 years or so to get any good at all with it.
2.) Around the time going into high school I started using C++ to make shitty text adventure games (literally using a bunch of if/elses and cin/couts, and I think even some GOTOs since I didn't understand how functions worked.) I knew that NES dev was a thing, but I wasn't smart/experienced enough to figure out how to get any assembler to work.
3.) Some time around highschool I began to mess around with Java, but OOP was still too complicated to wrap my head around. So I saved that until I eventually started taking programming classes the school had.
4.) I think sometime going into my senior year of HS (2015) I finally learned how to make something functional in 6502 and joined this site.
So I guess Java and 6502 assembly are the only two languages I've coded something serious in, haha. But of course I've tinkered around in numerous other languages like Python, C and LISP. Seeing all your guys' responses makes me wish I would have started with Basic.
I used QBASIC first, when I was probably 14. I didn't learn how to program though, by the end of it I maybe had a vague understanding of what a variable is. I used the built-in help file to learn how to use PRINT and INPUT, with that I made a simple text-based game.. Virtual Reality Gym Class. Based on my IRL gym class that several of of my friends were in, so it was pretty funny to us.
Then I started on 6502 for NES a couple years later. After that, 65816, SPC700, PIC16, PIC18, toyed around a little with Propeller assembly. Then finally I learned C, started using it about 10 years ago. And Verilog, if that counts. 6502 is still what I consider my first language, since my usage of QBASIC was pretty minimal (I'd look at stuff like gorillas.bas and it made zero sense to me).
Sogona wrote:
3.) Some time around highschool I began to mess around with Java, but OOP was still too complicated to wrap my head around. So I saved that until I eventually started taking programming classes the school had.
OOP is a definite distraction from just writing functional code (pun intended).
It gets really stupid when the OOP examples are fruit or animals. An orange isn't an object that needs to be constructed/destructed dynamically, but best treated as an item in a table or structure or array. When using animal taxonomy to show inheritance, one must meticulously think of all the possibilities as it doesn't make sense for a fish to bark, or enunciate, or walk, or whatever contrived method it's supposed to perform.
Sogona wrote:
Seeing all your guys' responses makes me wish I would have started with Basic.
The 3DS has SmileBasic, but not advertised well or a very large userbase, and dependent on servers that could be shut down at any time. It's still fun to play around in.
BASIC is kinda bad because it scales terribly with nowadays video resolutions and expectations (users expect to plot a picture file, not just draw one pixel; or play an mp3 file, not just a flat beep sound).
For anyone starting now, I guess I would recommend Python, but only with a good text editor that visualizes and corrects the indentation. I like how Python grows when you start adding more and more packages, but also its downside (because you spend so much time looking for packages from a one-line description, and 90% of it is junk).
whicker wrote:
BASIC is kinda bad because it scales terribly with nowadays video resolutions and expectations (users expect to plot a picture file, not just draw one pixel; or play an mp3 file, not just a flat beep sound).
There are modern implementations of BASIC (or languages evolved from it) that provide extensive multimedia support though. Two notable examples are
SiMPLE (designed by the legendary Bob Bishop of Apple ][ fame, though this doesn't seem popular and its official site is dead now) and
Hot Soup Processor (very, or in the past 10 years, used to be very, popular in Japan; note that YY-CHR was originally written in HSP before moving to C++ and then C#).
whicker wrote:
BASIC is kinda bad because it scales terribly with nowadays video resolutions and expectations (users expect to plot a picture file, not just draw one pixel; or play an mp3 file, not just a flat beep sound).
The BASIC dialect in
Visual Studio Express can do all these.
whicker wrote:
For anyone starting now, I guess I would recommend Python, but only with a good text editor that visualizes and corrects the indentation.
IDLE is a Tk-based code editor that does exactly this, along with completion of function names and quick access to docstrings. It comes with Python for Windows and is an
apt-get away on Debian and the like.
whicker wrote:
OOP is a definite distraction from just writing functional code (pun intended).
It gets really stupid when the OOP examples are fruit or animals. An orange isn't an object that needs to be constructed/destructed dynamically, but best treated as an item in a table or structure or array. When using animal taxonomy to show inheritance, one must meticulously think of all the possibilities as it doesn't make sense for a fish to bark, or enunciate, or walk, or whatever contrived method it's supposed to perform.
Yeah, but I do see how it has its place in making gigantic projects. There's just so many intricacies that make it confusing. I really haven't done much programming-wise this summer except work on my NES game, so all of Java's fun little quirks have left my immediate memory; which kinda scares me because I have my data structures class to look forward to this fall, which of course is gonna be taught in java.
whicker wrote:
The 3DS has SmileBasic, but not advertised well or a very large userbase, and dependent on servers that could be shut down at any time. It's still fun to play around in.
BASIC is kinda bad because it scales terribly with nowadays video resolutions and expectations (users expect to plot a picture file, not just draw one pixel; or play an mp3 file, not just a flat beep sound).
For anyone starting now, I guess I would recommend Python, but only with a good text editor that visualizes and corrects the indentation. I like how Python grows when you start adding more and more packages, but also its downside (because you spend so much time looking for packages from a one-line description, and 90% of it is junk).
Yeah, I know what you mean. What I mainly meant was the idea of being a kid in the 80s messing around in Basic on your school's Apple II/C64/whatever sounds like it would have been a fun time. I guess my previous post could have been phrased as "I wish I was born earlier."
I've always been interested in Puchicon/SmileBASIC but if it requires internet server to even use it, it's not very interesting. That would mean it will become useless after the 3DS internet service are shutdown.
Oh and talking about BASIC on a forum dedicated to NES development it's impossible to ignore the Famicom/NES's native BASIC interpreter.
English Manual Family BASICEnglish Manual Family BASIC V3Family BASIC resourcesThe cartridge is quite limited with just NROM and no CHR-RAM (although there are VRC7 and MMC5 hacks of it with CHR-RAM), but you do have full access to the Famicom's hardware, and you can call machine language 6502 subroutines.
I started off with a mixture of "DS Game Maker" and also kinda switching between C and C++. Couldn't decide which I liked more. Nowadays my policy is, for simple programs with portability, C. For anything else, C++, and if I want to have fun then I'll use nall, as it's pretty fun to use.