1. Programming languages
    1. Python
    2. HTML
    3. JavaScript
    4. Others
  2. Open-Source
  3. Hardware
    1. Projects

Programming languages

Whenever I get asked how I managed learning all this stuff, the answer is always the same: learning by doing. Pretty much everyone can learn coding, I mean it's all practice. And practice. And even more practice. Here's is what I have reached so far.

Python

Python was my first real programming language back in early 2014. Writing this static HTML stuff just didn't satisfied me enough, I wanted to write a game. With zero experience of real programming in general and how to write a game. Eventually it worked out anyhow, but when I look at the code today I get nightmares. Have I mentioned, that I insist on PEP8 for every and every line of Python code I write?

Yeah, that was the beginning. I was fascinated and continued, exploring all the beautiful things you can do with just a few lines of code. Writing "classical" algorithms bored me at the beginning (uuh, too much theory), so I looked into writing GUI applications and using (not writing!) encryption algorithms. Have a look what I have done since then (as all these lists this one is probably far away from being complete):

GUI programming

  • Qt with PyQt5/PySide
  • Gtk+ with pygobject
  • tkinter with both uppercase and lowercase "T"

Computer Vision/Scientific programming

  • OpenCV 2 and 3
  • PIL for image manipulation
  • Scratched matplotlib, numpy, scipy

Networking

  • FTP/FTPS access, sync (ftplib)
  • Receiving data over HTTP, website scraping (http.*)
  • Email statistics plotter (imaplib)

Other

  • pygame for games, camera access and a really basic GUI toolkit
  • Encryption with PyCrypto
  • The Raspberry Pi RPi.GPIO and pigpio libraries
  • py2exe, cx_freeze and pyinstaller

I started with Python 2.7 but then switched to the newest 3.x. (OK, that's not the complete truth, currently I'm still on 3.5). However I am aware of the differences and really try writing code that runs with both major versions. Unfortunately I still have some of my older code lying around and not being ready for Python 3. print statements suck. Even worse, some code does not even run on operating systems other than Windows, but that is definitively historic. These days my platform-specific code is Unix-only

HTML

With HTML (5, of course!) you can rule the world build amazing websites. Like this one. HTML was actually the first (hmm, should I say description or programing?) language I've learned.

But let's start with the beginning. There was a thing called HTML 4.01. Actually, the doctype said that. Yeah, the doctype. This complicated first line of code nobody could ever remember. Then... I read about XHTML. Almost as old as the newest HTML, but the general opinion was: better, more future proof, more consistent. So rewrote all the sites to validate for XHTML.

Then, another new version. Are you kidding me? Anyhow, HTML5 (they've missed a space there) and HTML 5.1 (yep, space is back) are awesome. This is what I call future-proof

Now I have written so much HTML that it is basically part of me. This website's draft was made in about 2-3 hours, the whole thing was finished up in 4 days. Including all the content. I cannot really decide what is good enough for me, so I'm doing complete redesigns again and again. Since my first attempt with table layouts and shit like that, this is the 7th version being online for a while. And each time, I get better.

Think of it as evolution in the sense of Charles Darwin.

Final words.
I use as much semantic markup as possible. Not ten levels of nested <div>s. HTML5 for the win. And never ever again <iframe>s.

JavaScript

Beside of HTML, I also learned JavaScript for interactive elements on websites. I was using jQuery for all the time, but now I try to use I'm using vanilla JS for new and small all new projects. Come on, jQuery is not the truth anymore. I have not tried node.js yet, but that's definitively on my "Cool, let's try this one sometime" list.

In comparison to Python, learning JavaScript wasn't that hard. I had all the basics of general programming, and over the time I learned a lot of good practices and de-facto standards.

For example, by having Webpack 2 running I can make use of the wonderful ES6 import features and thus keep my code clean and modular. Just waiting for the moment when all major browers include JS compilers capable of ES6 features...

Others

I'm also more or less familiar with these languages, but have not dived so deep into the language's internals:

  • PHP for WordPress/web development
  • Java for Android apps
  • C# for ASP.NET MVC applications and as scripting language in the Unity game engine
  • C/C++, mostly for microcontrollers and Python extensions
  • Bash, for small shell scripts and application starters

Open-Source

At some point I started contributing to open-source projects. I don't want to write code on my own for myself all day long, and I found some feature missing in PyInstaller requested there long time ago. Eventually I learned Git and wrote the missing part of code including documentation. The maintainer was busy, but after all the code made it into a new release at some time. I was somewhat proud of it!

In the past I reported bugs whenever they affected me, recently I contributed to one of my favourite icon themes, La Capitaine. The creator is busy too, and why do most OSP suffer from the maintainer being busy at some point?

I published one project of mine on GitHub which some people eventually found useful. Over there I am my own maintainer and can handle commit messages and stuff just as I want. I learned a lot, released about 4-5 versions in the first two days and sometimes just commit for fixing one single typo. In case you ever wanted the ability of controlling brightness and power of your official 7" Raspberry Pi LCD, here it is: rpi-backlight.

I'm also collaborator on the spotify-downloader repository, a Python script downloading songs found on Spotify from YouTube. The original author is Ritiek Malhotra, and I'm still really happy about the invitation. It's probably the first time writing lots of code with a guy of my age.

The open-source community is a great thing, creating awesome projects together is freaking... awesome. I just like the ideas behind all of this!

Hardware

I love playing around with one of my Raspberry Pi. Again, this is a sort of evolution, since I started by buying an ATMega based development board. This one was programmed with some copy&paste C, not so much fun. I am neither a C/C++ nor a low-level hardware guy. The Raspberry Pi and the board it replaced taught me the fundamentals of electronics, soldering, reading Buttons, Switches, Potentiometers and all kinds of sensors from software, controlling LEDs, motors, and LCDs.

On the Raspberry Pi I use Python, since that's what it was supposed to support on hardware side. For GPIO access I use the RPi.GPIO and pigpio libraries.

Projects

Long-time projects, of course I've done much more experiments with all kinds of electronics and the Raspberry Pi.

  • Raspberry Pi and RDA5807M (radio receiver) based FM radio with touchscreen and web UI
  • Temperature logging and online visualization with the DS1820 1-wire temperature sensor
  • I recently started building my own room control with touchscreen, alarm clock (RTC) and many features provided as individual plugins.

If you got so far...

...you have my full respect. You seem to be interested in what I'm doing, otherwise you wouldn't have read a text of this length all about coding.

If you want to, get in touch with me!