Tuesday, January 17, 2017

Hello, World!

Actually, that's Hello, World!

See, I was frustrated one day and reformatted everything, reinstalled everything and was in the process of setting up my development environment. I made a very simple 'Hello, World' program to test a compile and make sure I had everything set up properly. I normally leave out the comma in any Hello World program.

In this instance, I also accidentally omitted the 'o' in Hello, so upon running the program, I was greeted with a command prompt that read "Hell World!"

I was mildly amused by that, and thought it might be interesting to start a blog with that title. The purpose of this blog would be to chronicle my various struggles with programming, and maybe do some tutorials or something. I have some weird-o ideas about programming in general, and some weird-o ideas about how to learn it and how to teach it. As someone trying to learn, I've found a lot of the resources out there to be very good at teaching people the absolute basics of any language and the very basic concepts of programming, but then there's this gap. The next level of readily available material aimed at programmers is very high-level, advanced shit. I've only begun to start scratching the surface of these things, and most of it has been a very frustrating process.

I feel like this is true largely because there are very few resources that tell you what you should be looking for to learn. I've been teaching myself on and off for the last couple of years, and trying to take it more seriously for the last 6 months or so, and only a few days ago did I stumble upon the concept of linked lists, hash tables and binary trees. I stumbled upon this information totally by accident, and now it is something that I've been absorbing as much of as possible.

And this has been fairly typical of my experience with programming. I often don't know what I don't know, and it makes learning difficult.

So the goal here is to sorta back way the fuck up and write some programs in what I feel is a much more useful sort of order, introducing concepts as they become useful, and to actually make useful and interesting programs with these concepts. I don't want to make limited programs where I catalogue student grades and library books or do fake POS systems for fake stores with fake inventories of fake items. I want to write software that I, personally, might actually find useful and might actually use.

Which means that certain things will have to be introduced far earlier than they typically are. I think this is very feasible, tho, as I feel that the main reason so many programmers in the learning phase tend to be unable to understand concepts or find certain things boring or monotonous is because the context these concepts are learned in is very boring and monotonous or, in my opinion, poorly demonstrate the actual use of the concept in a practical way.

Pointers were something that I had really no clue how to use properly at first, and I frankly didn't understand the point of them. This is purely because the way they were introduced was in such a very basic way where they were not actually very useful or practical to use. They were basically just replacing standard variables with pointers to those variables in the program, and I didn't see the point of it. This made them seem like some kind of weird, alien part of the language that I sorta understood, but felt like I was not really grasping them at some basic level, because I could just rewrite all of the programs in my literature that used them WITHOUT using them, and the programs still ran fine.

So I rarely used them for anything. it wasn't until much later that I started to see them in use in places where, suddenly, the point of them actually made sense. I finally 'got' pointers by randomly stumbling around others' code. I do not think I am special in this sense, and I'm certain there are others who are currently facing a similar situation, where they sorta get the concept of something, but fail to realize the practical application because they are not truly shown what can be done. once I understood pointers, I realized that they made a ton of awesome shit possible and I got really excited about it. Somehow, I think that feeling of excitement would have better served me if I had been feeling it as I had learned about them in the first place, instead of the awkward uncertainty of why they even existed as a thing.

Anyway, I'm going to work on some concepts. This isn't really going to be a 'tutorial' blog where I show people how to program. I'm not nearly at a level where learning anything at all from wme would be a good idea. Instead, I hope that maybe this might be of interest to people who DO teach others how to program. I feel like there's a weird thing where the people teaching programming are actually making it more difficult to learn by trying to hold back information they think might be confusing or overwhelming, when the reality is the opposite. That the potentially overwhelming stuff is the stuff that makes these concepts truly 'click' with students and gets them more excited and interested in programming and can keep their enthusiasm up.

So yeah, this is going to be interesting...

No comments:

Post a Comment