Thoughts about Functions

    • When a function is called, the values of the arguments are copied to the parameter variables. (Parameters are inside functions or procedures, while arguments are used in procedure calls.)
    • All programming functions have input and output. The function contains instructions used to create the output from its input. [Link]
    • The purpose of a function is to take in a number of values or arguments, do some calculations with those arguments and then return a single result. [Link]
    • Functions differ from procedures in that functions return values, unlike procedures which do not. However, parameters can be passed to both procedures and functions. [Link]
    • Pretend a function is a mini-programming environment within your actual programming software. It can have its own variables and do its own calculations. However, the function cannot directly access the variables outside of its environment – that is the program as a whole. If you want to give the function a value from outside of its environment, you have to pass it in as a parameter so that the function knows this piece of data exists and can be used.  Think of parameters as the bridge between the main program and the functions you create. In order for these functions to use data from the main program, you must pass the variables in as parameters so that the function can use them. [Link]
    • You can think of the parameter as a parking space and the argument as an automobile.  Just as different automobiles can park in a parking space at different times, the calling code can pass a different argument to the same parameter every time that it calls the function/procedure. [Link]
    • When the parameter is passed into the procedure; it does not return any value whereas a function always returns a value. [Link]
    • Procedures are capable of returning multiple values and the functions are able to return limited values. [Link]
    • Input and output parameters can be passed in procedures whereas in case of functions; only input parameters can be passed. [Link]
    • Functions can be called from procedures whereas it is not possible to call a procedure from a function. [Link]
    • Encapsulating frequently-used code into functions makes it easy to re-use the code in different places and/or different programs. [Link]
    • All Python function calls return a value. If a function call finishes executing the statements in its body without hitting a return statement, a None value is returned from the function. [Link]

Coding Journey Update: May 2017

I got completely burned out on the technical peculiarities of C Programming after finishing the book ‘Head First C Programming’ so I’ve decided to give my brain a bit of a break from C for the month of June and started reading ‘Beginning Ruby: From Novice to Professional’.  I am rather excited at the idea of coding a bot in Ruby and after all the grinding I’ve been doing with C it would truly be a welcome break at this time.

The Cliff of Confusion from Viking Code School Blog

I am currently in ‘The Desert of Despair‘ when it comes to my coding journey. It feels so weird knowing that I have finally survived ‘The Cliff of Confusion’.

I thought that how I would know that I had survived it was that I would just wake up one day and have the confidence that I was a programmer. It didn’t happen that way at all. I still don’t have the confidence that I am a programmer but instead, the fear that I would never understand all the information that I seemed to have just been constantly cramming in my head without the slightest understanding has now come together as if they were all puzzle pieces within a box.

My biggest obstacle while dealing with ‘The Cliff of Confusion’ was the fear that I was too stupid to ever make any sense of the fire hose of information that was coming at me. I was completely overwhelmed with all there was to learn and how many different paths there were to follow. There was just too much that I needed to absorb. It felt as if every day was exactly the same as the one before and that I was just grinding and grinding and that I couldn’t get any traction at all. I would talk about quitting a lot because I really felt that the fact that I wasn’t getting coding was because of an inherent flaw in either my character, my thinking style or my IQ.

In contrast, my biggest obstacle while dealing with ‘The Desert of Despair’ is my impatience. I can now see all the puzzle pieces in the box, but it feels like it is going to take forever to put them together to make a complete picture. Instead of being fearful all the time that I will never get where I want to go, I find that I am completely frustrated all the time with how long it is going to take me to get there.

I have so many projects that I want to do but now but I am having trouble figure out how to use the tools that I have now built up in my toolbox. I wanted to create a bot with C Programming but decided that it would be easier to just do it with Ruby since I already had a book where the final project was created a bot which I had struggled with and given up on in the past but now with what I’ve learned about C Programming under my belt I feel confident that I will now be able to understand it.

I will instead use my C Programming skills to work on Arduino projects since it would be a better fit for the language. Of course, that means I have to come up with the money to buy the hardware from somewhere and who knows when that would happen.

I was really afraid at first that trying to do Ruby at the same time as C Programming would end up completely overloading my brain to the point where I’d find that I wouldn’t be able to do anything at all but so far the two languages really seem to compliment each other.

I guess we will have to see at the end of June if this is another ‘Mirages of Mania’ and if I will just end up going in circles and once again end up where I started.

I just need to keep pushing and grinding and know that if I keep the faith that I will find myself in the ‘Upswing of Awesome’ someday. That day may come a year from now or five years or ten years but I have to keep the faith.

Faith is defined as belief without reason and at this point I have to admit to myself that it is the only compass I really have to get me where I am going at this point. The article, “Why Learning to Code is So Damn Hard” didn’t mislead me about ‘The Cliff of Confusion’ or ‘The Desert of Despair’  so I just need to keep the faith that the ‘Upswing of Awesome’ truly exists.

I just somehow need to keep the faith.

Coding Journey Update: March 2017

So, here is the story. I got frustrated with how slow my progress has been when it comes to learning programming that I completely changed course and threw out all the goals that I set for myself last month.

I was just so tired of doing nothing but reading books on c programming  and after some self-reflection made the decision that I would give up on reading any more books about programming and came to terms that now matter how much I go over and over the same ground that I will always feel lost in what I am doing and that I just wanted to start programming despite of this.

I wasn’t exactly sure what I was going to code but I just knew that I just wanted to actually code instead of just reading about coding. Then I started looking around the internet for code examples and now I am starting to separating the code I find into beginner and advanced exercises.

I’ve also decided to put finishing CS50 completely aside at this point. I will get back to it whenever I get back to it.  I will also be putting learning both Git and Eclipse on the back burner for an undetermined amount of time.

For the month of April I am going to focus on actually coding and see where that ends up leading me. I’ll get back again to more solid goals in May.

My goals for the end of April:
  1. To get farther in ‘Programming Logic and Design’
  2. Keep on doing actual programming

Coding Journey Update: February 2017

I think the hardest part of trying to teach myself to code is knowing if I am following the right path to get me there. I really envy those people who can afford to go to school to learn. I have no doubt that having someone else writing out a learning road map and then being there to answer any questions you have about what they have written down is well worth the money but since I don’t have any money I am just going to have to do this journey the hard way. I always think that I am on the path to where I need to go but then find myself having to circle back and retrace my steps over and over again.

The last failed path that I followed was that last year I settled on to committing to doing Harvard’s CS50 online because I thought following their learning path would be my best bet but although I learned a lot of the video lectures I found that the guidelines that were written for the problem sets were beyond frustrating to follow and I would lose weeks and weeks of time trying to figure out the correct way to do the things that they wanted me to do.

I finally just gave up on it completely and went back and deleted almost all entries referring to it since I’ve decided that I am just going to now use it as a guideline of what it is that I am supposed to be learning and I deleted the entries because I rather not be constantly reminded in past entries about my past failures. I find that to be demotivating so I and rather just delete them all and start over with a fresh start again.

The one gift that CS50 did give me is that it did get me over my fear of C programming. I have always been intimidated by C programming and would of never chose to learn it as a language if CS50 wouldn’t of put me on that path so I do not consider the time I’ve put into it so far to be time completely wasted. I just know it is time to start on a new path because I am not willing to lose anymore of my life or my peace of mind to completing the problem sets that they assign anymore. It would be different if I had someone I could constantly turn to in order to hand-hold me through the part that I get stuck on but since I don’t I rather just stumble through by trial and error my way.

My goals for this month are to try and finish reading ‘Absolute Beginner’s Guide to C, second edition’ by Grey Perry. Learning from the book has also been an exercise in frustration because it was printed in 1994 and a lot of the code doesn’t want to work with my compiler. I would also like to at least get part of the way through ‘Up and Running with Git and GitHub’ on since my library card now gives you a free membership to the site.

Despite all the set backs in the last year and a half I think that I am actually starting to get to a point of where I feel a lot less lost when it comes to C programming. I’ve been wandering around in ‘the desert of despair‘ for so long that it has been a constant battle to not just quit but in the last few weeks things have been clicking a lot more in my head when it comes to programming.

Goals for End of March:
  1. Go back and read the article ‘Don’t Believe Anyone Who Tells You Learning To Code Is Easy’
  2. Go back and read the article ‘How to survive the desert of despair in your code-learning journey’
  3. Finish ‘Absolute Beginner’s Guide to C, second edition’ by Grey Perry
  4. Install and learn how to use Eclipse

Summary of my journey so far in learning a programming language

Computer Language: “So, you see over here we have a horse and wagon.”

Me: (*peers over to where the computer language is pointing too*)

Me: “What are you talking about? I don’t see a horse and wagon.

Computer Language: “It is right there.”

Me: “There is not a horse and wagon over there.”

Computer Language: “You are not looking hard enough, it is seriously right over there.”

Computer Language: (*gestures over towards the same direction it has been gesturing to but now with more frustration, hostility and force*)

Me: “Um, all I see over there is a horse that seems to be hitched up to what appears to be….a car?”

Computer Language: “Yes, as I said, a horse and wagon. Use your imagination.”

Me: “That is not a horse and wagon. That is a horse that has been hitched up to a car.”

Computer Language: “Well a horse hooked up to a car is the exact same thing as a horse and wagon.”

Me: “What on earth are you talking about?”

Computer Language: “Well, the horse is hooked up to the car the same way as it would be to a wagon and you can sit on roof of the car the same way as you could on a wagon so therefore that makes it pretty much the exact same thing….duh!”

Computer Language: *rolls its eyes at me and smiles at me smugly.*

Me: “Let me get this straight, you are telling me that you hooked a horse up to a car and you are now reasoning that because you are able to hitch it to the car and that you can sit on top of the car that now logically it has all the features and functions of a wagon.

Computer Language: “Yes, of course! Why wouldn’t it now operate the exact same way?”

Me: “You’re truly insane.”

Separating the Non-Programming Goats from Programming Sheep

Look, I am going to be straight with you Dear Internet. I do not enjoy blogging. I am not a blogger.

My spelling is pretty horrible and my grasp of grammar is even worse.

I rely on my emotional intuition in my day-to-day life more then I do logical sequence. I get easily frustrated with the most simple visual puzzles and I find the concept of organization a struggle.

The only reason this blog even exists is because that it was ‘highly suggested’ to me that writing a blog talking about my trials and tribulations with programming and computer science would end up being helpful to me by allowing me to place my random thoughts about it in one place and also so that you Dear Internet could correct me by telling me how idiotic those thoughts sound sometimes.

Excuse me, we have to stop for a moment Dear Internet as I can see someone has their hand raised in the back of the room with a question.

“Why is this blog called ‘Teaching a Goat to Code'”, you ask?

For those of you who missed it, back in July 2006 the site Coding Horror published a post that would eventually become ‘Internet infamous’ called: Separating Programming Sheep from Non-Programming Goats.

The 30 second summary goes something like this….the act of programming seems literally unteachable to a sizable subset of incoming computer science students because they are unable to blindly follow its meaningless rules and come to some meaningless conclusion.

I am the textbook definition of a ‘non-programming goat’.

I also want to learn computer science.

So, if you are a natural-born mathematical genius whose everyday thinking can be broken down sequentially into Boolean logic then this blog will probably slowly drive you insane with its constant struggle to blindly follow meaningless rules to come to some meaningless conclusion.

But the good news is that the majority of computer coding blogs were written by ‘Programming Sheep’ just like you. It talks to you with your way of thinking and perceiving the world in mind.

This blog is different. It is being written for my fellow ‘Non-Programming Goats’ so they can have a window into the world of someone who thinks the way that they do. Naturally non-linear, with a hate of the sequential and a dislike of using Boolean logic in an emotionally ‘grey-area’ world.

Enough talk Dear Internet, it’s time for us to start the experiment.

Can a goat be taught how to code? 

I don’t mean just copying programs out of a book and running them. I mean actually understanding computer science in all its majestic glory.

Let me know what you think about this subject in the comments.