Self-Taught Programmer Seeking Soulmate (language) [LONG STORY]
I haven't been programming for very long, but I've been interested in learning to do it for quite a long time, since I was quite small. I'm now 19 and just barely starting down the path of getting a degree in Computer Science at my local Community College. I didn't exactly have the easiest time first trying to learn how to code, however.
Unfortunately, I never had the pleasure of knowing someone while I was growing up who could explain what all the mysterious brackets and function calls meant or what a class was and why they were the greatest things since sliced bread. There were many times that I would pick up a how-to book or download an IDE off the internet only to give up an hour later after being thrown a flurry of archaic syntax errors because I didn't know the difference between '=' and '==' or why some statements needed a semicolon and others simply didn't (in fact, even after learning the basics of C++ recently, I still don't entirely get the purpose behind it). Now, this only applies to the languages I even got to the stage of being able to compile; there were some IDEs that I couldn't even get past the setup with because they were built on the assumption that you actually knew the difference between an IDE and the compiler associated with it.
It was several years ago that I discovered a musty old tome by the name of "QBasic Programming for Dummies" at my local library. I was intrigued, but didn't hold out very high hopes that the magical language held within its pages would be any less forbidding. But, as I flipped through the examples, lo and behold, everything appeared to be written as if it was meant to be understood by a mere mortal. I didn't see pages full of esoteric characters and single-letter variables or variables with names so deformed in an attempt to abbreviate them that you'd never guess what they stood for, let alone what they did (my early experience has made me detest code that does either of these). None of the basic functions required so much as an #Include (a gigantic source of headaches for me in other languages previous) and all of the available variable operators are right there on your numpad. There were no classes. None of the examples so much as pretended polymorphism existed. The later examples weren't trying to shove "advanced language features" down my throat (I found a lot of Visual Basic tutorials guilty of this during a brief stint with it); the advanced examples were really just more complicated combinations of the basic language features. For the first time ever, I could actually read each program line by line and know what effect each statement would have. This was before I even tried installing the disk located in the back of the book.
(I hear they actually recommended simple languages like this to beginners back in the day. Who would've thought.)
When I finally got home clutching my new treasure, my excitement was palpable. I wanted to create better versions of all my favorite games, and a trove of ones I had thought up myself. Then, after loading the CD and struggling for what felt like an eternity, I realized the book was written in 1994. It had been over a decade since QBasic's day in the limelight, and the software was hopelessly outdated; it didn't even get through the installation without crashing. Dejected, I mentally threw QBasic in with the laundry list of other failed attempts and figured I was never going to be able to just "pick up" a programming language by myself.
It was perhaps a year and a half ago that I discovered, almost entirely by accident, a programming language called FreeBASIC. I don't entirely remember how I stumbled upon it, but I do remember the part of the description about it being a successor to QBasic catching my eye. In short order, I was able to install the compiler and hook it up to a no-frills IDE that amounted to a text editor with a Compile button and syntax highlighting. After finding and re-reading QBasic for Dummies, I was actually writing working code again! And this time, a large portion of it was code I wrote myself rather than copy-and-pasted examples from somewhere else. After learning almost all of the commands in the book (there aren't many), it became almost a game trying to figure out which puzzle pieces I needed to make the code do what I wanted. Instead of looking for API Command #5341 (an exaggeration, but some other languages' commands tend to lose their uniqueness and individuality when there's so many, especially for a beginner who has nobody to explain the intricacies of each one to) I had to puzzle out what combination of the couple-dozen commands at my disposal would do the job.
I remember the very first subroutine I ever wrote was a crude but fully working text parser, simply because I couldn't figure out how to read two separate commands from the player in a simple text-based adventure game I wrote. When I got tired of typing in every command, I decided I would learn how to use the mouse functions included in the graphics library. All it provided me with was the X,Y coordinates and status of the mouse buttons, so I jumbled together enough code to define a couple UI buttons and figure out which one was being clicked. It worked fine when those were the only buttons in the game, but as soon as you tried to add different screens with different buttons, the amount of If-Thens spiraled out of control. So I strugged for a few weeks and eventually settled on a hierarchy system of screens with dedicated member-buttons, just so I could make a menu system for a clone of Pokemon. FreeBASIC even includes a very basic implementation of Object Oriented Programming, which I learned to use out of convenience after doing it the hard way, and not just because a dozen people told me it was "better".
Coming from this background, Java almost seems scary. Almost all the low-level things I had to figure out myself are now handled by some input listener or a narrow class with a mountain of specialized methods. Especially annoying is the type-sensitivity of Java. To me, 'while', 'While', and 'WHILE' all mean the same thing, but not to Java. The thing that's probably going to be hardest for me to wrap my head around is how Java abstracts away some of the busywork I've become used to; it feels uncomfortable not having to explicitly check each component for visibility and draw them to a graphics buffer.
Anyway, enough with my sob story; now look at what I've done. I started out introducing myself and now I've written a ramble that would make an 80-year old grandfather telling his grandchildren about the "good old days" proud. Now I'm off to post the question I intended to an hour ago, and probably find out I've been doing things backwards all along.
Re: Self-Taught Programmer Seeking Soulmate (language) [LONG STORY]
Welcome to the forums; it sounds like it's been quite the journey.. and you're only 19?? You damn kids keep making me feel old!
Anyway, knowing that low-level stuff will help you understand what Java is doing behind the scenes, but would you really want to write a full application or game that way?
And I don't want to be pedantic, but what you called type-sensitivity is just case sensitivity. Type-sensitivity would more likely allude to the fact that Java is a strongly typed language, which is why you have to declare every variable as a type (int, String, Object, whatever). As for Java's case sensitivity, it shouldn't give you too much trouble if you follow the standard naming conventions (method and variable names start with a lower case letter, classes with an upper case letter). You'll be happy to know that the standard naming conventions also recommend using descriptive variable names instead of single letters (except for looping variables, etc).
Much luck on your journey ahead!