Free/Low-Cost Coding Resources – Programming for Beginners

Learning how to code from scratch can be pretty overwhelming and potentially expensive depending on where you choose to study. I’ve put together a list of some great free/low-cost coding resources to get you started. Hope they’re helpful, and would love to hear about any more you can recommend!

Coursera  – there’s a subscription fee for this one but you can gain access to experienced professionals and university professors. I took a number of Charles Severance’s courses in Programming for Everybody in Python and fell in love with coding. Definitely beginner friendly and an awesome teacher.

Udemy – Again, there’s a fee, but courses vary in cost and there are often large discounts available. So, so many types of programming courses available whether it be mobile development, data science or machine learning. I took Jose Portilla’s course on Natural Language Processing in Python and loved it.

Khan Academy – This was helpful to me as a super beginner in HTML/CSS and was a great way to learn the basics. And it’s free!

LeetCode/Codewars – when you get beyond the basics and want to try your hand at some algorithms, LeetCode and Codewars are both great places to start. While there are fees for premium subscriptions, a lot of the resources are freely available.

YouTube – so many tutorials on so many topics by experienced developers. Not to be overlooked and totally free of course 😉

StackOverflow – probably every programmers best friend. Not a course but an amazing troubleshooting resource where you can ask your coding questions and learn from others.

Happy coding 🙂

The Great Escape: Adding Code Snippets To Your HTML File

When building up your portfolio, or any HTML file that you’ll want to use in a web browser, the formatting of code and code snippets can be a little tricky.

Some elements of, say, your JavaScript or Python syntax may cause your web browser some confusion. The overlap between symbols such as “>”or “&” can cause difficulty in interpretation.

This can be avoided by manually changing overlapping symbols through “HTML escaping” which will correctly render your code snippets in the browser.

A quick and easy way to avoid the tedium of making these changes by hand is to use an online HTML Escape Tool like https://www.freeformatter.com/html-escape.html or https://codebeautify.org/html-escape-unescape.

Check it out, and make the great escape 😉

APIs, the Universe, and Everything


What is an API? 
 API stands for Application Programming Interface – that sounds a little scary, but in reality, it’s really just a kind of middle-man that can be used to pick up information from one location (the provider) and deliver back to another (the consumer).

FedEx for Machines
 Let’s say you have words, information, well-wishes, bills – if you’re a company, which need to get into the hands of another person.You could leave your house or office, hop in the car and drive across the country to hand-deliver the letter, birthday card or electricity bill to that person (the latter would probably be as desirable a job as tax-collector), or you could have Fedex do it for you.
 Fedex is somewhat like an API in that it receives information/data from you and provides it to someone else on your behalf. All the sender and receiver need to do are conform to Fedex’s terms of service – such as using a particular label, signing off on a package etc. All kinds of applications use a similar service when they want to provide or receive information to and from various other apps. This service is called an API. As long as each application (the consumer and the provider) conform to the constraints of the API, then data can be effectively communicated between them. 
 The Google Maps API is a great example of this that you’re probably familiar with. Let’s say you’re perusing a restaurant review app and see that they’re using a Google Maps widget to show you the location. Rather than that application having to build its own mapping system with a multitude of locations, co-ordinates and directions, the Google Maps API can be used (like your Fedex service) to access that information and have it delivered back to the restaurant app.

The Internet of Things
 Two other concepts to be aware of in this realm are the API Economy which is the overall system that is composed of the proliferation of API services that are available and the Internet of Things (IoT). The Internet of Things refers to the extension of communication between users and applications to devices like smartwatches, smartcars, and voice assistants when they take to the internet and can also be accessed through APIs. Billions of the devices are expected to appear just in the coming year.

The Universe and Everything
 While doing some research on APIs, I sat back awestruck at the exponential development of this data-based universe. I could see it expanding rapidly as each new device, each new app linked and crossed paths and grew. A visualization of multitudes of ever-growing and overlapping paths and interfaces was before me.
 But then I thought, is it really that surprising? I mean, the more we learn about the natural world we live in, the more we find there is to learn. A simple leaf becomes its apex, veins, and petioles, its epidermis, cuticle, and cells, and it works to leverage an intricate chemical process to survive. Upward and outward, we explore nebulae, galaxies and black holes. We can feel overwhelmed by the rate at which these tech creations multiply, connect and grow. But maybe we could also take our ability to create such worlds as a signpost, a reflection. What if, instead of letting change, creation or growth only scare us, we let it still us.
 Rather than draw a stark line between ever expanding technological developments and our humanity, perhaps our increasingly complex created universes could remind us that we are in fact made in the Imago Dei. And that, by comparison, our creative advancements are mere echoes of the brimming complexity of the world around us. That way, we can be both humbled and encouraged, cautioned and in awe. We can build, create, and learn – knowing that our greatest achievements come with limitations and with an arrow pointing to something more.
Here are a couple of resources on APIs and the Internet of Things if you’d like to learn more:
What exactly is an API? 
What’s an API and Why Do You Need One?
The Emerging Internet of Things

The “Why” of Language – Form, Function, and Beauty

Form and function are familiar categories of language that address things like syntactic structure and the purpose of such in communication. Certain forms, for instance, the practice of shortening the form of very common words such as “woman” -> “women” rather than “woman” -> “womans”, are thought to be economical in our use of language and allow our brains to process them more effectively. Form and function are connected and we use syntactic and semantic tools to express this connection. A word, phrase or sentence that is frequently used can be made more economical to aid in comprehension as we saw in the case of “women”. Another example is iconicity, that is, when the utterance reflects the logical structure of the thing being described in the real world. It can help us to understand sentences quickly so that the purpose of our communication is carried out more readily. Take “the big brown wooden box”. Which of those attributes is most inherently true of the box? It could be wooden but black, or wooden and brown but small. The order of the adjectives is reflecting the level to which each is inherently true of the box the closer they get it it. This arguably helps us process such a logical reflection of the real world more effectively. For example, a parent telling a child who has dumped their red legos into the laundry basket to, “pick out all of the small red plastic blocks!”, might have better luck than the one asking that they, “ pick out the small blocks red plastic.” 

But, if languages can only be categorised by their form to the end of usefulness, why not just have one? Why don’t we all decide on one, easily formed, easily processed language and get things done more effectively? Well, apart from the fact that there would probably be years of raging debate as to what exactly is the best form or the quickest to comprehend, I thinking we’re missing at least one other category – beauty.
I mean, take a house. It’s there for shelter against the elements, protection of ourselves and our belongings and a place to have friends over. Why not all just pick a basic form of a house that will do the job and paint it brown? Actually, why paint it all? It’s fulfilling its form and function.
But, we don’t do that. We decorate our houses, embellish them with ornaments and attractive lighting, hang portraits and paint walls. We are created, not just to find forms that help us to function, but to create. And to express our unique and individual identities. Sometimes those align more with some than others, but there is beauty in the difference. There is also beauty in the common threads that run through even the most distinct of tastes. The same is true of language, I believe. We hear of Babel as a curse, and so it was. But given time and different circumstances (i.e., a little less of the “let’s all take over the world”), maybe the people of Babel couldn’t have helped but come up with new clever words and code languages to have fun with friends. Think of Tolkien! Perhaps they would have developed different dialects based on their values, interests and cultures that would eventually evolve into distinct languages and families embellished with syntactic secrets that the rest of us get to discover and explore.
Speculation? Yes. But, we’re created to create. I can’t help myself.

Don’t @me, or Maybe Do? – The Lifespan of Instance Variables in Ruby

What’s the purpose of @ and attribute accessors in Ruby? The key concept here is survival. Ok, that sounds a little dramatic, but access to and longevity of an instance variable or its attributes is crucial if we want to access and manipulate them outside of their native block of code.

Take the creation of a coffee class that takes the attributes of size and type defined as follows,

class Coffee
       def initialize(size, type)
end
coffee = Coffee.new(:medium, :cappuccino)
puts coffee

That at least tells us there’s a card there, but, it hasn’t stored the rank and the suit values. You might be thinking, “cool, well, I can just grab one of those attributes with the following code”,

puts coffee.size
But remember, survival.

Outside that “end” block, those attributes can’t be stored or accessed. That’s where you need to @them. Even if it’s not your style.

So,

class Coffee
      def initialize(size, type)
               @type = type
               @size = size
end
coffee = Coffee.new(:medium, :cappuccino)
puts coffee.type
Now the attributes can be stored in memory. These are called “instance variables” and they survive as long as the card is around. But, we still need to access those attributes outside the block of code. One way of doing this is to create a method for each,

class Coffee
      def initialize(size, type)
              @type = type
              @size = size
      end
       def size
           @size
       end
       def type
          @type
       end
end
coffee = Coffee.new(:medium, :cappucino)
puts coffee.type

Try it out in the terminal with your own class and attributes. We survived! What more is there? Well, shorthand survival. Because, ain’t nobody got time for that.
In Ruby using an attribute reader, attr_reader, will do exactly the same thing as above, allow you to access and output the method.

class Coffee
      attr_reader :size, :type
      def initialize(size, type)
             @size = size
             @type=type           
      end

coffee = Coffee.new(:medium, :cappuccino)
puts coffee.type
puts coffee.size
end
It works! It won’t, however, allow you to manipulate or change it. That’s what the attr_writer is for.

class Coffee
         attr_reader :size, :type
         attr_writer :size, :type
         def initialize(size, type)
            @size = size
            @type=type           
         end

coffee = Coffee.new(:medium, :cappuccino)
coffee.type =  ‘latte’
puts coffee.type
puts coffee.size
end
And, even shorter again, attr_accessor, because we’re probably going to use both, right?

class Coffee
       attr_accessor :size, :type
       def initialize(size, type)
             @size = size
             @type=type           
       end
coffee = Coffee.new(:medium, :cappuccino)
coffee.type =  ‘latte’
puts coffee.type
puts coffee.size
end

Finally, rather than just calling the attributes, we can add an output method that will output the coffee itself.

class Coffee
       attr_accessor :size, :type
       def initialize(size, type)
             @size = size
             @type=type           
       end

       def output_coffee
             puts “A #{@size} sized #{@type}”
       end

coffee = Coffee.new(:medium, :cappuccino)
coffee.type =  ‘latte’
coffee.output_coffee

end

And you should be left with a “medium sized latte”. Yum.


So, did you survive?

How Grassfields Bantu Taught Me To Think (Differently).


The view from my hotel in Bamenda. I remember wondering if trees and landscapes like these shaped the perceptions and languages of indigenous speakers.

“What is truth?” Pilate infamously enquired. It’s a topic that’s been wrangled with, debated, scoffed at and sometimes embraced. I fall into the category of believing that there is objective truth; right and wrong, fact and fiction. But, I also think that in an effort to defend objective provable truth some of us can fall prey to the fallacy of equating relativism with perspective.


Do soccer teams lose matches? Yes. Do countries lose wars? Yes. It’s objectively true. It doesn’t depend on my feelings, my beliefs, my hopes. It happens. However, does one person’s experience of loss, victory, confusion have to match mine? Do we .each do |x| (another coding pun) just like the next person? Of course not. Can I view the experience as an individual or as part of an individual culture that differs from yours? Yes. Does that make the reality of these experiences any less true? No. Objectivity and perspective are not at odds in the same way that truth and relativism are.
Seeing something from a different angle or feeling something unique doesn’t make the reality less true. It just makes me different, in some ways, from you. And that’s ok, and actually, beautiful.
When I began to study the Ring languages of Grassfields Bantu, I realised that here was a group of people with whom I had so much in common, we ate together, shared laughs and empathised with each others struggles. Yet, the way that they speak about the world, the way they form words, categories and sentences was so different from what I was used to.
One example was the semantic feature of [Shape] in their languages. Objects I viewed as distinct, bounded, individuated things like apples, chairs and ants, they viewed as masses to be individuated, selected from the concept of chair-ness and given a boundary with some morphological tool of their language. Now, before you think this is due to some lack of education or primitive form of knowledge…may I remind  you of Plato’s forms (aspatial substances) and the “chair-ness” of a chair? Or, in simpler terms, what is hair? Is it a mass on your head, or does it consists of numerous, individuated hair-like strands? The speakers of Grassfields Bantu have developed a complex noun class system that allocates nouns to groups based on categories such as animacy, plurality and, some argue (myself included), shape/boundedness. These speakers have stopped me in my tracks and cause me to see the same world from another angle.
Grassfields Bantu taught me to stop and think. It taught me to observe the multi-faceted nature of a given diamond of objective truth. Maybe there’s more than just my perspective, or yours.

Categories Collide: Logic Meets Creativity

 One of the main themes of my doctoral thesis in linguistics is the notion that “to cognize is to categorize”. As humans, we have a tendency to identify, evaluate and categorize. And that’s a good thing. Categorizing the edge of a cliff as “Dangerous!” or putting our hand in the fire as “bad idea” is helpful and probably wise. If we meet a stranger and pick up in the cadences of a French accent, we might attempt a friendly, “Bonjour!”. However, our natural ability to categorize is sometimes skewed, and, in the absence of nuanced insights, downright harmful at times. What if Alex Honnold looked at the edge of a cliff and it only ever set off the “Danger!” category? Ok, some of you might think that’s actually not a bad idea. But, on the basis of experience, skill and opportunity, that cliff-edge also sets off his “Challenge!” and “Possibility!” categories, resulting in an incredible human feat that drops jaws in wonder and sets a few palms sweating (trust me, I’ve felt my husband’s).
 So, why do I mention all of this. Well, with an undergrad in psychology and an (almost) PhD in linguistics, I’ve been immersed in the humanities and social sciences to a large extent. And having recently stepped into the realm of programming, I had previously thought that this was a hard-wired world of electrical signals hidden behind screens and immersed in a mysterious cloud that was very much out of my reach. Basically, not my field. Categorization: “Off-limits!”. But, when I realized that coding had a big role to play in the world of linguistics, in natural language processing and machine learning, I was intrigued. And when I wrote my first line of code and saw the words, “Hello World”, pop up, I was hooked.
 Worlds collided, categories meshed together. In linguistic terms, coding versus the humanities suddenly seemed to be more prototypical than classical categories. Basically, the edges were fuzzy. I started to think of the possibilities. I was reminded that I loved logic; black and white, right and wrong, but I also loved beauty, romance, head in the cloud-ness (see, I can even make terrible programming puns now). I quickly saw that at my hands were logical tools that, when used wisely, could create things of great beauty, means by which people can be educated, cultures and languages  can be preserved, and scattered families can communicate.
Categories can be helpful, but sometimes it’s good to have them collapse in on each other and create a beautiful unplanned soup (another coding pun, I’m getting good at this). And as I work on getting this new set of skills under my belt, I’m excited to see where this collision of worlds will take me.