The languages I used tied pretty heavily to the computers I used.
In chronological order:
- 7-8 ('98-99): Accidentally broke the menu system on a random old DOS machine I was given. The person who gave me the box wrote a new menu for it in QBasic 1.1. This person did not know about "QBASIC /RUN" + "SYSTEM", so gave us instructions ("Alt, F, X") on how to exit QBasic. Of course I didn't exit QBasic, I tinkered with the menu system. This machine was eventually returned to the person who gave it to me (along with another).
- 8 (99): Was given an old 486-25 by a friend; this ran DOS 6.22 and Win3.1. I think it was assembled by a local computer retailer; the VGA ROM BIOS had "Eagle Systems Australia" burnt into it. Very curious as to that worked out. I'm not certain but I don't think this machine had QBasic on it. Windows eventually fell over (I have no idea why), so I stuck with DOS. I don't remember much of what I did with this box at this point.
- ~11 (02): I vaguely recall finding out the machine had something wrong with it internally (I was not knowledgable to any degree at this point), and someone from a local church (IIRC?) offered to fix it, which turned out to mean replacing the HDD (...ah, that explains why Windows fell over). Not quite sure if the old HDD was copied to the new or how that worked out, but I remember a parallel cable and Microsoft Backup (although I didn't know that's what I was looking at at the time), but it had QBasic on it when I got it back, so I continued tinkering. (A second PC also manifested sometime around this point, but I didn't have any floppy disks to copy QBasic onto it from the other machine IIRC.)
~14 (03): Started visiting the local library. I would so like a copy of my Internet history from back then! Somehow stumbled on QuickBasic 4.5 and was able to download it onto a floppy disk; didn't use many of its additional features myself, but tinkered with (and completely failed to understand) some programs I found online that did. Filled a "QB" directory on my disk full of embarassing half-finished .
~15: Was randomly given an old Celeron which got me my first exposure to Win98. Somehow discovered Resource Hacker while at the library one day. This wasn't a language, but I redesigned the UIs of things like Sound Recorder and this taught me about visual UI design and got me wondering why program UIs couldn't be fundamentally edited in some semantically consistent way while they were running.
- Found Word on the machine and stumbled on its "Save as HTML" option, kicking off my foray into the Web. I tried to copy Word to another HDD but that of course didn't copy the sprawl of 10000 random directories and Registry keys that accompany an Office installation. Ended up digging StarOffice 5.1 off of a CD that came with a magazine that had been purchased several years earlier. I learned HTML and JS off of SO, and loved its "desktop" type UI (it really filtered distractions!). I'm super glad Word broke; I only learned about the kind of "markup" it produces several years later. If I had've ever looked at Word-emitted HTML I don't think I would ever have gotten to the point where I let go of SO and started editing the HTML myself. Once I got to that point I also began to learn simple JavaScript.
- While researching Basic-like languages I found VB-DOS on a website one day, but forgot to download it. Eventually re-found it some time later on another website that also had Visual Basic (for Windows) 1.0, which I grabbed for lulz. Ended up deciding VB-DOS was too disjointed (takes several seconds to switch between the code editor and the form designer) and tried VB 1.0. I.... may or may not have a "VB" directory with ~100 unfinished projects in it. I had a 450MHz Pentium 3 at this point and my first properly working CD-ROM drive, but the library Internet download speed was rather slow, I had no idea how to "find things", and I had no idea how to burn ISOs anyway, so eg VB6 wasn't in my sights at all.
- ~16-17: Asked the similarly clueless and directionless bunch of kids I was hanging out with on IRC for language advice, and somehow began to set my sights on PHP... of all things. (This was where my IQ began its steady decline. I am not joking.)
- ~17: Installed Linux, began tinkering. Learned about shell scripting, which immediately clicked.
- ~17-19: Somehow managed to grasp pointers after years of trying, and began to tinker with C a bit. I found it generally required too much attention span so didn't do much with it.
- ~22-23 (2013-2014): Found an old Toshiba on the side of the road (the 333MHz Celeron in it was _removable_) and tried to install Slackware on it from a somewhat scratched CD. PHP was on the scratched part. I wanted to write a fast package selection utility; the only thing I was aware of on the machine besides bash was sed and grep. IIRC, I had to abandon my attempts after less than a week due to all the grep and (multiline!) sed expressions giving me a headache because it collectively looked like modem line noise, but I learned regular expressions in the process :D
--
I'd like to learn so many languages I don't honestly know where to start.
- I recently read about the golang SSL key-verification incident, and must say the devs' reaction inspired a lot of confidence. I've also been reading a Go ebook for the past month or two. This is the language I plan to use next.
- I'm also reading a Lua ebook too. This language is awesome.
- Erlang seems really interesting both from the standpoint of being message-passing-based and also due to the fact that it runs its own kernel. I'm wondering whether to just deal with Erlang's variable immutability (a linguistic paradox!) or whether I should play with EFL or Elixir.
- Obviously Lisp is somewhere in there. I'm unsure which one(s) to learn though: I want to get a good idea of Lisp's history, understand its context, and fully grasp what it is about it that everyone likes, so I have a bit of a Star Wars problem - what order to learn everything.
- I'm very very turned off of Python due to the 2.x/3.x debacle.
- Assembly language has been on my todo list since I was about 14. This one's a sore point; I've read more assembly-language tutorials than I could care to recount but always end up near-tearfully confused with eyes glazed over. Hopefully I can figure out what it actually is that I'm blocking on one of these days. Maybe I should skip asm and just go straight for machine code.
- I recently discovered the Forth family of languages. I have to say I really really like the Forth approach to programming - creating shrinkwrapped applications that perfectly trace the specifications of whatever you're trying to build, with zero architectural overhead. I'm going one step at a time with the RPN thing though. :P
- I recently realized that Ruby is easy to abuse to "be cute" but that it can also be written straightforwardly and consistently. I didn't know that, I like this a lot (because its syntax is nice). I remember reading Why's Poingiant Guide to Ruby a few years ago and being heavily turned off by the way the guide made things seem dramatic and complicated. (I now realize my attention span was being spammed by the guide's presentational style.)
- I'm guessing I should probably pick up Java at some point, since it will probably come in handy in industry.
- On the subject of the JVM, I could probably do worse than to learn Scheme.
- C++ has been on my todo list for some time, but my computers are still quite old (I'm on an 11 year old laptop as of today), so slow compilers are doubly+ slow for me, so I have little incentive to pursue this.
I have a lot of problems with indecision, as you may have noticed :) - if something has surface-level issues, I shy away. I will admit that this is in open contradiction to the fact that I continue to learn PHP...
My main challenge is in finding a language I can enjoy working with that doesn't require a consistently clear brain to work with: I frequently have a foggy head due to various health issues (which are expensive to fix - and, hilariously, are also why I don't have a job).
> My main challenge is in finding a language I can enjoy working with that doesn't require a consistently clear brain to work with: I frequently have a foggy head due to various health issues (which are expensive to fix - and, hilariously, are also why I don't have a job).
There aren't many. I say this as someone whose head also gets screwed over by health.
Really, probably the language you are most familiar will fill the niche, because of muscle memory and the like.
However, the languages I find easiest on my bad days (not the worst, because programming is impossible on those):
* Python, because I know it really well
* Scheme, because it can't get much simpler. You can learn 90% of syntax, macros, types and functions in a (good) day or two. Edit: Look for Chicken for fast compilation, and Racket for many libraries. (Racket is Scheme+more, so not really scheme.)
* Forth, basically the same reasons as Scheme.
* Awk. It's a lispy C. The docs are fairly decent, and though its way of handling stuff can be a bit unusual (BEGIN, END, and in between that, something that runs on every line of input), its pretty effective as a programming language, and hasn't changed for a long time, making all tutorials and docs up to scratch.
Of all of those, Scheme is the simplest when my brain refuses to count to 5. (Seriously, it gets stuck at random points if I try on a bad day).
> There aren't many. I say this as someone whose head also gets screwed over by health.
Interesting. Maybe we should compare notes sometimes. I have a bit of a story with finding alternative-type stuff.
- I've been contemplating tackling Python, in spite of the 2.x/3.x thing. There's the perfect vacuum where versioning shouldn't be a problem, and the practical real world where knowing Python and the differences between the two will let me actually do interesting things.
- Thanks for the tidbit about Scheme - and about Chicken vs Racket!
- ColorForth is particularly interesting, and I found BigFORTH a little while back (which needed to be compiled with -O0 in order to not segfault, yay). Of course "make my own Forth " is in there somewhere :P
- I completely forgot to mention Awk (!) mostly because I have no idea at what point I began to pick it up, but I did get a basic idea of how it works a while ago, and I've been factoring it into shell pipelines more frequently lately. It's great for when I need to do something that sed can't express well (and I just properly read about how match() a) returns the index and b) also works apropos to grep recently, which is great)
(As an aside, Lua is ~200K and awk is ~632K. That is just wrong. [Mumbling about rewrite])
I'm reasonably familiar with the "not wanting to count to 5" thing... heh. Interesting about the Scheme thing in that context. I'll definitely have to give it a look.
> Interesting. Maybe we should compare notes sometimes. I have a bit of a story with finding alternative-type stuff.
I really like the theory of programming, and am constantly looking for languages that are
a) easier to write
b) amazingly expressive
Its always finding what's out there.
> - I've been contemplating tackling Python, in spite of the 2.x/3.x thing. There's the perfect vacuum where versioning shouldn't be a problem, and the practical real world where knowing Python and the differences between the two will let me actually do interesting things.
Thankfully, that's mostly gone now. Few enterprises still holding out, but most of the big libraries are 2/3 or 3 only.
And 3 is a lot more thought-out. Most of the warts are gone.
> - I completely forgot to mention Awk (!) mostly because I have no idea at what point I began to pick it up, but I did get a basic idea of how it works a while ago, and I've been factoring it into shell pipelines more frequently lately. It's great for when I need to do something that sed can't express well (and I just properly read about how match() a) returns the index and b) also works apropos to grep recently, which is great)
Awk is different, but great.
I had a boss at a previous job who'd used it for at least a decade for everything, so I had to learn the nitty-gritty.
I ended up building a CGI application that basically ran the entire website in Awk. Big learning experience, but rather cool.
> (As an aside, Lua is ~200K and awk is ~632K. That is just wrong. [Mumbling about rewrite])
Mmm. That does hurt.
But, at least Lua is an amazing language too, if a bit odd at times.
> I'm reasonably familiar with the "not wanting to count to 5" thing... heh. Interesting about the Scheme thing in that context. I'll definitely have to give it a look.
Scheme is stupid simple. Which is awesome.
Everything looks like:
( function arg arg arg )
So, Hello, World!
(display "Hello, World!")
Also, if a function ends with !, then it modifies state, and isn't really functional.
(set! varname value)
And finally, Scheme's macros are hygienic (don't interfere with variables that exist), and fairly simple:
(define-syntax (syntax-rules (swap! x y)
(let ([tmp x])
(set! x y)
(set! y tmp))))
After working a little while with it, those parenthesis won't be as scary, and you probably won't even notice them.
SICP also has lectures on Youtube [0], if you want a more formal way to get to grips with Scheme.
> I had a boss at a previous job who'd used it for at least a decade for everything, so I had to learn the nitty-gritty.
> I ended up building a CGI application that basically ran the entire website in Awk. Big learning experience, but rather cool.
Oh nice. That's kind of awesome.
(I was referring to gawk when I mentioned the 632K thing.)
> But, at least Lua is an amazing language too, if a bit odd at times.
I seriously don't understand why they won't allow ++ and -- and similar conveniences we've grown to almost expect from other languages...
(info about (Scheme))
This syntax looks fairly familiar (Lisp syntax is after all incredibly reductionist) and I remember ! from Ruby.
> After working a little while with it, those parenthesis won't be as scary, and you probably won't even notice them.
Haha, I remember someone telling me that about {} in C-like languages (PHP) a decade ago. I still notice them... but I know where to use them and what they're for now.
I don't think my brain will sprout a number-of-closing-parens-needed checker anytime soon; https://en.wikipedia.org/wiki/Subitizing is generally established to be mentally impossible for >4 items, so... (putting (everything) in parens) is fun, but s)t))ac))))ki))n)g) the closing ones onto single lines is... well all my brain's coming up with is a slightly incredulous blank stare.
--
By the way: I'm not quite sure how relevant this is to wherever you are (which I haven't been able to concretely ascertain), but I'm in Sydney. Curious to learn how far away I am from you, perhaps via email.
(I may have poked through some of your tales... and now I have to deal with a brain that's scrambling around trying to find a signup button so I can trail along with you sometime. =P)
PS. Just hit HN's post ratelimit for the first time, which was why this took a while to appear. Sorry!
>> which I haven't been able to concretely ascertain
> I do have fun befuddling geo stuff online. But these days, somewhere around Melbourne.
Ah, cool.
>> I may have poked through some of your tales...
> There's a website, with RSS in my HN account. Have fun!
Will definitely be reading through all of them ^^
Thanks very much for explaining what you did. I really appreciated that - I've never been able to compare languages by "easiest to understand when not mentally having a good day" before, which was great.
(NB. It's currently tricky for me to meet people IRL, so I'm always on the lookout when I say hi to people in the same country :) No worries!)
In chronological order:
- 7-8 ('98-99): Accidentally broke the menu system on a random old DOS machine I was given. The person who gave me the box wrote a new menu for it in QBasic 1.1. This person did not know about "QBASIC /RUN" + "SYSTEM", so gave us instructions ("Alt, F, X") on how to exit QBasic. Of course I didn't exit QBasic, I tinkered with the menu system. This machine was eventually returned to the person who gave it to me (along with another).
- 8 (99): Was given an old 486-25 by a friend; this ran DOS 6.22 and Win3.1. I think it was assembled by a local computer retailer; the VGA ROM BIOS had "Eagle Systems Australia" burnt into it. Very curious as to that worked out. I'm not certain but I don't think this machine had QBasic on it. Windows eventually fell over (I have no idea why), so I stuck with DOS. I don't remember much of what I did with this box at this point.
- ~11 (02): I vaguely recall finding out the machine had something wrong with it internally (I was not knowledgable to any degree at this point), and someone from a local church (IIRC?) offered to fix it, which turned out to mean replacing the HDD (...ah, that explains why Windows fell over). Not quite sure if the old HDD was copied to the new or how that worked out, but I remember a parallel cable and Microsoft Backup (although I didn't know that's what I was looking at at the time), but it had QBasic on it when I got it back, so I continued tinkering. (A second PC also manifested sometime around this point, but I didn't have any floppy disks to copy QBasic onto it from the other machine IIRC.)
~14 (03): Started visiting the local library. I would so like a copy of my Internet history from back then! Somehow stumbled on QuickBasic 4.5 and was able to download it onto a floppy disk; didn't use many of its additional features myself, but tinkered with (and completely failed to understand) some programs I found online that did. Filled a "QB" directory on my disk full of embarassing half-finished .
~15: Was randomly given an old Celeron which got me my first exposure to Win98. Somehow discovered Resource Hacker while at the library one day. This wasn't a language, but I redesigned the UIs of things like Sound Recorder and this taught me about visual UI design and got me wondering why program UIs couldn't be fundamentally edited in some semantically consistent way while they were running.
- Found Word on the machine and stumbled on its "Save as HTML" option, kicking off my foray into the Web. I tried to copy Word to another HDD but that of course didn't copy the sprawl of 10000 random directories and Registry keys that accompany an Office installation. Ended up digging StarOffice 5.1 off of a CD that came with a magazine that had been purchased several years earlier. I learned HTML and JS off of SO, and loved its "desktop" type UI (it really filtered distractions!). I'm super glad Word broke; I only learned about the kind of "markup" it produces several years later. If I had've ever looked at Word-emitted HTML I don't think I would ever have gotten to the point where I let go of SO and started editing the HTML myself. Once I got to that point I also began to learn simple JavaScript.
- While researching Basic-like languages I found VB-DOS on a website one day, but forgot to download it. Eventually re-found it some time later on another website that also had Visual Basic (for Windows) 1.0, which I grabbed for lulz. Ended up deciding VB-DOS was too disjointed (takes several seconds to switch between the code editor and the form designer) and tried VB 1.0. I.... may or may not have a "VB" directory with ~100 unfinished projects in it. I had a 450MHz Pentium 3 at this point and my first properly working CD-ROM drive, but the library Internet download speed was rather slow, I had no idea how to "find things", and I had no idea how to burn ISOs anyway, so eg VB6 wasn't in my sights at all.
- ~16-17: Asked the similarly clueless and directionless bunch of kids I was hanging out with on IRC for language advice, and somehow began to set my sights on PHP... of all things. (This was where my IQ began its steady decline. I am not joking.)
- ~17: Installed Linux, began tinkering. Learned about shell scripting, which immediately clicked.
- ~17-19: Somehow managed to grasp pointers after years of trying, and began to tinker with C a bit. I found it generally required too much attention span so didn't do much with it.
- ~22-23 (2013-2014): Found an old Toshiba on the side of the road (the 333MHz Celeron in it was _removable_) and tried to install Slackware on it from a somewhat scratched CD. PHP was on the scratched part. I wanted to write a fast package selection utility; the only thing I was aware of on the machine besides bash was sed and grep. IIRC, I had to abandon my attempts after less than a week due to all the grep and (multiline!) sed expressions giving me a headache because it collectively looked like modem line noise, but I learned regular expressions in the process :D
--
I'd like to learn so many languages I don't honestly know where to start.
- I recently read about the golang SSL key-verification incident, and must say the devs' reaction inspired a lot of confidence. I've also been reading a Go ebook for the past month or two. This is the language I plan to use next.
- I'm also reading a Lua ebook too. This language is awesome.
- I've come to realize I've been treating PHP like Perl. Half of me wishes I'd gone back and learned Perl instead, and that it's sad Perl doesn't have fast Web server integration or even standard FastCGI (at least I'm not seeing that it does). One the other hand, reading things like http://blog.schmorp.de/2016-12-29-griefing-the-perl-api.html and the 2nd half of http://blog.schmorp.de/2015-11-12-tidbits-why-coro-crashes-o... scares me off of both Perl 5 and Perl 6.
- Erlang seems really interesting both from the standpoint of being message-passing-based and also due to the fact that it runs its own kernel. I'm wondering whether to just deal with Erlang's variable immutability (a linguistic paradox!) or whether I should play with EFL or Elixir.
- Obviously Lisp is somewhere in there. I'm unsure which one(s) to learn though: I want to get a good idea of Lisp's history, understand its context, and fully grasp what it is about it that everyone likes, so I have a bit of a Star Wars problem - what order to learn everything.
- I'm very very turned off of Python due to the 2.x/3.x debacle.
- Assembly language has been on my todo list since I was about 14. This one's a sore point; I've read more assembly-language tutorials than I could care to recount but always end up near-tearfully confused with eyes glazed over. Hopefully I can figure out what it actually is that I'm blocking on one of these days. Maybe I should skip asm and just go straight for machine code.
- I recently discovered the Forth family of languages. I have to say I really really like the Forth approach to programming - creating shrinkwrapped applications that perfectly trace the specifications of whatever you're trying to build, with zero architectural overhead. I'm going one step at a time with the RPN thing though. :P
- I recently realized that Ruby is easy to abuse to "be cute" but that it can also be written straightforwardly and consistently. I didn't know that, I like this a lot (because its syntax is nice). I remember reading Why's Poingiant Guide to Ruby a few years ago and being heavily turned off by the way the guide made things seem dramatic and complicated. (I now realize my attention span was being spammed by the guide's presentational style.)
- I'm guessing I should probably pick up Java at some point, since it will probably come in handy in industry.
- On the subject of the JVM, I could probably do worse than to learn Scheme.
- C++ has been on my todo list for some time, but my computers are still quite old (I'm on an 11 year old laptop as of today), so slow compilers are doubly+ slow for me, so I have little incentive to pursue this.
I have a lot of problems with indecision, as you may have noticed :) - if something has surface-level issues, I shy away. I will admit that this is in open contradiction to the fact that I continue to learn PHP...
My main challenge is in finding a language I can enjoy working with that doesn't require a consistently clear brain to work with: I frequently have a foggy head due to various health issues (which are expensive to fix - and, hilariously, are also why I don't have a job).