The differences in Teaching to Code

Some weeks ago I started to live code using my Twitch project. I use this mainly to spend a few hours a week to get (again) familiar with .NET and C#. I stopped using it (in a professional way) when .NET was available as version 3.5. Indeed, my very last project was a migration project from 3.5 to 4.0.

While I was in the role of a dev/Sr. dev I used to code mostly in pair programming. Great experience. Not for everyone. I loved it. I learned a lot. Every time you stuck, you pair helped. EIther you thought and explained and he/she coded or the other way around. A major element of the secret is that you learn most when you explain.

Live Coding

The same seems to be true for live coding. Live coding is some kind of horror if you do new things. And it probably is utterly boring for all others seeing you looking up documentation and examples. However, there is quite a lot you learn while you are explaining – or at least while you try to explain. Probably, because you are trying to explain, i.e. you try to understand.

Said that I tried to implement an exercise from a recent programming course. I wanted to see, what the students face.

Problem 1: No documentation of the code

Part of the exercise was: Try to understand what the code does. In other words: reverse engineer. That’s some discipline not everybody is good in. Others are way better than me. I do need a lot of silence and time to understand what the intention of the author was when writing the code. Doing this live is quite q lot of stress. Remember, you try to talk at the same time. Anyway, I think it is a very bad example to give to students. I should try to avoid this in the future.

Problem 2: The exercise was about how to do things not what to achieve

I never thought of this before about exercises. It was about implementing a Delegate and an Interface, an Indexer and o on. Implement a subclass and use the base constructor the same way. No words about what to achieve. I think it took me two hours just to get half of the exercise done. Would I have learned how the concepts work? Have I understood the new features of the language? No way.

Problem 3: The artifacts

I really think about what I have created. Some code. No added value. Meh.

The Post-Show: How things worked much better

Afterward, there was something I had on my todo list. As we started out podcast recently, I want to generate episode covers automatically. I am a big fan of letting things being done by the robotic overlord.

Difference 1: How I started

I thought about the requirements:

  • needs to run on Windows and macOS
  • needs to be called from the command line to be used in scripts
  • needs to put some text on an existing image
  • needs to be accomplished before 1 a.m.

Difference 2: How I proceeded

I did some research (aka Googling). I was looking for some articles about how to deal with image processing in .NET. I found an article from Scott. I had a look at the different frameworks mentioned by him and decided to check out the capabilities of ImageSharp. I checked out the examples and I wrote the piece of code.

Difference 3: What’s different

I had to figure out how to do what I wanted to accomplish. I learned about at least three existing frameworks. I figured out how to use one of these frameworks. I had to figure out how to use NuGet to get the packages. I had to fiddle with some command line magic in Visual Studio projects. I learned about one new öanguage feature.

Conclusion

I have to go on with live coding because I want to become much better in it. It is quite challenging, especially if you haven’t written code for years. And it forces me to face challenges. So if you want to see me fail writing code, feel free to join the live stream in the future.

The more important fact is, that I have to re-think how we teach programming. Yes, you need to explain concepts. But one should not enforce them to be used. If doing it feels like pushing a developer in some direction. Do it with delegates and interfaces and so on. There are probably 100 different ways to accomplish your goal. Let them try out some of these ways. The might end up with the ideal solution – or not. If there is one at all.

The Open Source Issue

After working several years for Microsoft (before MSFT started to open source code), I already used quite a lot of open-source software. I run my own Linux server in the cloud internet and used a whole bunch of free and open-source software. Actually, I also open-sourced quite a bit of my code as well as contributed to various open-source projects, such as the openHAB project.

I have quite a fan of Ubuntu and nevertheless how much I would like to, I probably never will find time to contribute in a meaningful manner until I retire. Also, I have an endless list of ideas of things, I would like to write, code and probably open-source, I eventually will never get along with that list. Even worse, there is a whole list of abandoned projects I would like to claim and push forwards, but again this will never happen.

Quite some time ago, I had a friend who wrote open source. At one day, he said farewell to the community with the word “Sorry guys, however, I now have to work for real money.”, which actually point out the issue quite well.

I haven’t thought about this friend for quite a while until I meanwhile started using my very own OwnCloud server. I started browsing the addons and apps and was faced a quite frustrating situation.

For one of the plugins, I was looking for I found the following announcement

Due to the massive testing effort and the problem of nearly no donations I’m going to stop the further development. If anyone wants to step in, feel free

For another plugin in Firefox, I heavily used on for years I got the notification the project will not be continued in the future.

I am absolutely aware that maintaining OSS need quite a lot of effort and dedication. Especially if the OSS is created and maintained by private persons. Therefore, I was very disappointed by one comment recently made at on one of my projects:

..but in our org we cannot just sit and wait until someone fixes the issue.

You could still bay the author to fix the issue. This would instantly address the point made by my former colleague mentioned above. And here we go, I realized that sometimes companies doe use OSS as it does not cost money, but also the are not willing to pay to get things fixed or to fix these issues and contribute to the project due to company policies. Been there. Seen it.

I hope there will be a mind shift towards OSS and fewer comments as the one above.

Organizing Ideas – A not yet lost Battle

Recently, I have the problem to organize my ideas. To put it upfront: I don’t provide a solution. I simply describe the problem here.

Every time I surf the web, read blogs or news sites and scroll through my twitter feed, I find something interesting. Sometimes colleagues or friends point me to something, sending my a message through on of the many messengers.

Eventually, I want to work through all these articles and sources but often I simply get lost. I forget, don’t find the time and when I have time I don’t remember what or where to look at.

Problem 1: To many Inboxes

Multiple private E-Mail accounts, work e-mail, SMS, multiple messengers, blogs, news sites, work e-mail, Confluence to-do lists, private Microsoft OneNote, work Microsoft OneNote, Teams at work, an Evernote account and so on, this is an endless list of inboxes. Fome quite some time I used Pocket to collect many of these inputs but eventually Pocket turned out just be one additional growing inbox.

For now, I became very pragmatical and forward everything to one single mail account. Links, tweets, articles, photos and so on. Everything I want to read later just piles up on one single account.

Problem 2: Working through the Pile of Shame

For those with kids, they know the problem. Between work, preparing meals, keeping things up and running and spending time with the kids, there is only a little time to get other things done. Especially tasks which take a good amount of thinking, coding or diving deep into technologies. Over time this became a growing list, a queue with no consumer. One problem here is indeed to organize your ideas. I tried Microsoft OneNote, Evernote TheBrain. Eventually, I created just more lists to work through.

At one point I thought about how I organized my ideas and thoughts while writing my doctoral thesis. Eventually, the answer was the act of writing itself. I wrote everything down into a large document which ended up as my thesis. A lot of information was deleted on the way, but at the very end everything was well structured, perfectly organized and compressed to the most relevant information.

While writing another book is still on my list, the solution to my utter problem became obvious. I started to revive my blog. I wrote regularly until 2011 but due to changed focus in my jobs, blog entries became more and more infrequent. I rethought the initial idea of the blog: writing for myself and started to work through my lists and putting down as much as possible to my blog.

How is it going?

Here you are and read one of the things I had on my list. I recently tried to get rid of my “old” lists, one after another is being worked through for interesting stuff, ending in the blog. I am still looking for a nice tool setup which might help me to organize all this information without creating just another inbox, though. Therefore, the problems are not solved yet, but at least they are addressed.

Twothousandandeighteen

2018 was not bad at all. Here are some of the major achievements and events of last year. Quite a few things happened during the last year.

  • After I bought a 4K TV, I finally got my XBOX One X as there was a great deal at Amazon. Finally, I was able to fully utilize my TV.
  • In February, I started teaching Interactive Systems and MCI at the Baden-Württemberg Cooperative State University in Karlsruhe. It looks like the course went quite well as the University decided to offer it a second time during the autumn where I gave the lecture a second time. As a fun fact, they forgot to tell me until I got a note some days before the course was scheduled.
  • In May I started teaching a second lecture covering data structures and algorithms, also at the Baden-Württemberg Cooperative State University in Karlsruhe which will be given annually.
  • As a result of the lecture, I started to write a book covering this topic using .NET Core. However, I am afraid I won’t be able to finish it in 2019.
  • I also was appointed as a member of the examination board of Baden-Württemberg Cooperative State University in Karlsruhe where I advised two students writing their bachelor thesis.
  • Also in May, I became a certified Product Manager after becoming a Certified Scrum Product Owner in 2017. The course, given by Product Focus based in London, UK is highly recommended.
  • Our son celebrated his very first birthday and started walking this year. Not really my personal achievements but something you are proud of as a dad.
  • In September we switched from HomeKit to Amazon Alexa and changed meanwhile almost all our Lights to Hue and IKEA TRÅDFRI.
  • There is only a little I was able to achieve in my day job, however, our team managed to finish a five-year multi-million migration.
  • As some side projects, I started learning Ansible as well as Docker and moved my 10-year-old handcrafted, homebrewed server to the latest generation of automated container based version.
  • I also started again blogging, especially about my experiences with Docker, Ansible and further Automation.
  • Unfortunately, our rabbits died by the rabbit hemorrhagic disease. Actually, this was a rather sad event. The vaccine is not easily available for this particular and very variant of the virus. It was an event I learned a lot about vaccines, viruses as well as diseases at all.
  • Also, it seems as we experienced one of the longest droughts in Germany. We did not have any rain for weeks or even months.
  • In December, I was appointed at a teaching assignment of Software Engineering of Complex Systems at the University of Heilbronn. I will start this lecture in February ’19 as well as a lab covering software development. I am really looking forward for these new courses.
  • All over the year, I suffered from overall sleep deficiency. I wish I would know where our 16mo takes his energy from.
  • One highlight was definitely visiting my former manager and old friend from Microsoft Research who meanwhile is head of a university.
  • Eventually, I started using Twitter again.

Although I thought 2018 was a rather boring year, it looks as there was a lot going on. Unfortunately, I was not able to read that many books as I am used to, but his might change in 2019. So I am looking forward to an exciting next year and many new things to learn.

Fingerprints as Security Token

I am still wondering how people can even think of using fingerprints as security tokens. You spread them all over. It’s like writing down your credit card PIN wherever you are.

Therefore, fingerprints a great for identifying you, however, not for authenticating yourself.

Think about it. These are two absolutely different things.

Total Costs of Ownership

If someone can’t let things go because they did cost much money at some point in time, consider the following:

  • What was the value of this item once you purchased it?
  • What would it costs if you had to buy it today again?
  • Would you spend that money for this item today?
  • Do you still use this item or do you keep it just because it did cost money some time ago?
  • What a re the costs of keeping it?

From all thoughts, I propose the latter is the most important. Keeping things does come with cost (time for organizing, time for tidying up,…). If you are not using something at all and probably not using it anytime in the future while you spend time in carrying it from one place to another, there is no rational reason to keep it. Calculate the costs of doing so, and you will realize that the original investment of purchasing it, was only a minor portion of the total costs of ownership