Showing posts with label flashcards. Show all posts
Showing posts with label flashcards. Show all posts

9 September 2020

Flashcards Coupling and Cohesion

Transition Coupling FLIRT-SBBLow Coupling and High Cohesion are basic design principles in both functional programming and object orientation. What is coupling? Coupling is the measure of the strength of association by a connection from one module to another. At least that is one of the definitions I found when researching the topic. Another one is that Coupling is the degree of interaction between modules. Following some original research from 1974 by W. P. Stevens, G. J. Myers and L. L. Constantine, Structured Design, IBM Systems Journal Volume 13, Issue 2, Pages 115-139, there are several types of coupling and different degrees of its strength. The same is true for cohesion. These are a lot of definitions to remember - flashcards to the rescue.

Flashcards
So I created a deck of cards about coupling and cohesion. It contains 115 questions and covers
  • Definition of Coupling
  • Coupling based on the type of its dependency.
  • Types of coupling by strength.
  • Examples of code elements with certain types of coupling.
  • Postel's Law
  • Coupling Contributing Factors
  • Definition of Cohesion
  • Cohesion based on the type of the module's elements' relationship.
  • Types of cohesion by strength.
  • Examples of code elements with certain types of cohesion.
  • Problems caused by low strength cohesion.
These are just basic definitions and code samples. Some definitions seem outdated or incomplete but I wanted to follow the original wording from Stevens, Myers and Constantine. So take them in the light of 1974. ;-) Also I am missing newer and more high level aspects of coupling and cohesion, e.g. Connascence.

Download
I use Anki digital flashcards. Its apkg files can be used with Anki for Windows, Linux, Mac and Android. For iOS there is AnkiApp but I did not confirm that it works with apkg. (Liviu Jianu reports that its desktop version does not work with my decks. Thank you Liviu.) Download the Coupling_and_Cohesion.apkg here.

4 June 2020

Flashcards and Microlearning

I like learning in all its aspects. A large part of software work is hands-on, so I experiment a lot and work through old and new code katas alike. For theory I rely on classic books like Clean Code. Sometimes I struggle to internalise theoretical knowledge and take notes, create extracts, mind maps or sketch notes. For material I need to memorise I like (digital) flashcards.

Applications of Flashcards
I use flashcards for a lot of different things.
  • The common case is to study tiny facts like words or numbers. IDE shortcuts and spelling alphabets are in this category. These flashcards work very well for me.
  • Then I tried visualising keys, which did not work as well.
  • I also use them to remember key points from books, e.g. The Little Schemer or Gerald M. Weinberg's Secrets of Consulting. Key learnings from books, i.e. phrases or sentences, are more difficult to remember. I am still experimenting with these - maybe flashcards are not ideal here.
  • In the past I created decks of cards to accompany some of my training workshops, e.g. Design Patterns. While participants were enthusiastic about them, I am pretty sure they did not use them to deepen their newfound knowledge. People use different phones, so the availability of flashcard apps is also an issue.
  • Even when I fail to study the cards later, creating them is a learning experience on its own. I have to collect and structure the material, formulate the questions and find precise answers. For example I created cards around Coupling and Cohesion which helped me understand more of these two concepts.
Micro GardenMicrolearning
By researching flashcards, I came across Microlearning. This is kind of a buzz word - everything is micro today, e.g. Micro-Workouts. (You practice for five minutes a day and then the exercise gear folds under your bed ;-) Wikipedia says that Microlearning deals with relatively small learning units and short-term learning activities. [...] In a wide sense, Microlearning can be understood as a metaphor which refers to micro aspects of a variety of learning models, concepts and processes. It is a new concept and there is no clear definition. It contains a lot of things. Besides the obvious reading, listening or watching short pieces of information, Microlearning activities include flashcards, quizzes, answering multiple-choice questions, micro games and more.

Conclusion
I was surprised to learn that sorting and organising learning content like tagging it (e.g. Social Bookmarking) is considered Microlearning. I like sorting and connecting information, I even sort my code katas. The most fun activity listed on Wikipedia is composing a haiku or a short poem. I did compose a poem in the past but never considered it a tool for learning. I like the idea. Maybe I will write a poem about TDD or Micro Services in the future.

I do not consider a whole deck of flashcards Microlearning. A whole deck is so much more as it contains all the aspects and details about a certain topic. In addition, creating it takes several hours. I am seeing that because I create most of my decks myself. Probably I am putting too much information into them as well. Sometimes I am overwhelmed by my own questions. For example my Design Patterns deck contains more than 360 questions including class diagrams and all. On the other hand, learning a few cards now and then - especially from an unknown deck - is fine.

Listening and watching short audio or video recordings is Microlearning, too. I like to listen to podcasts, especially if each episode is focused and not too long. That means it is shorter than ten minutes. Short episodes are easy to consume between other activities, e.g. when commuting. It is easier to stay focused. (Yes, maybe I am getting old. I have less time and energy for prolonged learning.) That is the reason I plan for episodes of eight minutes in my own podcast on Coderetreat Facilitation. Short episodes are easier to produce, which allows me to publish more often.

Bonus Material
The German Wikipedia entry on Microlearning contains a paragraph on Microlearning in the context of software development. It lists Test Driven Development as an example. This is an interesting angle. When the test - an assumption - goes green, the implementation moved forward a micro step and the developer knows a tiny bit more about the system.

5 March 2019

Flashcard Madness: Learning to spell

Ben Talking To GrandmaDuring work I sometimes need to spell unknown words. These might be names, e-mail addresses, foreign words or technical terms. The situation might be on the phone or during mob programming sessions, where I am unable to write the word on a white board or a chat window.

Spelling can be complicated and needs practice (as seen in these Developer Melange recordings outtakes ;-). To avoid confusion and to spell consistently I settled for the ICAO/ITU/NATO Spelling Alphabet. As I recently fell into flashcards - hence the title Flashcard Madness - and I created a deck to learn and practice spelling. I use Anki digital flashcards. The apkg files can be used with Anki for Windows and Android and AnkiApp for Mac and iOS.

This deck for English Spelling contains cards for the English NATO Alphabet, e.g. question spell D is answered by Delta. I added some (recursive) spelling exercises to the end of the deck, e.g. question spell Delta is answered by Delta Echo Lima Tango Alfa. Because of "madness" I went on to create an additional deck for Austrian German covering Deutsches ÖNORM A1081 Alphabet.

Download English_Spelling.apkg and Deutsches_Buchstabieren.apkg here.

22 February 2019

Flashcard Madness: The Little Schemer

On my journey into the Scheme Programming Language I am currently reading The Little Schemer (4th edition) by Daniel P. Friedman and Matthias Felleisen. I started reading because of it was recommended by different sources. It is a fun little book. Its style is quite unusual as it is written as a series of questions, which force you reflect about the content along the way. It repeats the same steps again and again - a reminder of recursive concepts - which is forcing you to practice the concepts you just read about.

The book introduces Ten Commandments and Five Laws for the Scheme style of programming. The commandments are basic rules of working with lists and the laws define the API of used functions. Ray Grasso collected all the commandments and laws in his notes. What to you do when you have a list of rules? You study them! I like using flashcards to study short facts and created a set of digital flashcards for the Ten Commandments and Five Laws. The deck is in the Anki file format (apkg), which can be used with the Anki application under Windows and Android. There is a similar application AnkiApp for Mac OS and iOS.

The deck contains questions about the rules themselves, e.g. What is the 2nd Commandment? With answer use `cons` to build lists.. Then I derived questions which are more actionable, e.g. When recurring on a list of atoms, `lat`, ask two questions about it? With answer `(null? lat)` and `else`. I am not sure these cards are useful on their own, but they definitely helped me to commit the facts I learned from the book to my memory.

Download The_Little_Schemer.apkg here.

27 July 2016

Improving Typing Accuracy

Das Keyboard - Model S Ultimate (III)I am always interested to improve my typing performance and eager to use keyboard shortcuts. As Code Cop I mentor developers and pair with them in different environments. I need to improve my typing and shortcut-fu across different tools and use flashcards to memorise IDE shortcuts. I found that I need more visual hints to remember the positions of certain keys. I am able to touch type but I do not know the exact position of the keys consciously. This is sometimes a problem when typing passwords.

Using a Blank Keyboard
Iris Classon reported that using a blank keyboard improved her touch typing accuracy. She listed measurements and statistics on her web site regarding her improvements. I own a Das Keyboard Ultimate and have used it from time to time. It is true that using it improved my touch typing accuracy, but it did not help me to "know" where the keys were.

Key Flashcards
I want to memorise the exact locations of all keys on the keyboard. This is very difficult for me, but I want to master it. As with the IDE Shortcuts I used Anki to create a deck of flashcards containing all keys on the keyboard. It starts with pictures of the blank keyboard and the name of the key in question:
Where is the #'-key on a German keyboard?Showing the keyboard already on the front side of the flashcards - the question side - helps me visualise the location of the key. I use the TKL (tenkeyless) variant of the keyboard, ignoring the numeric keypad, to save horizontal space. When ready I advance the deck and see the key marked on the keyboard:Position of the #'-key on a German keyboardThe same layout on both sides of the flashcards help me keep my visual focus on the position. (Having two pictures for each card doubles the file size of the deck, which might be a problem on mobile devices running Anki but I had no issues when using the deck.) As I use German and UK layout depending on my pairing partner, I created two decks with German and UK layout respectively:I did not create these decks by hand, rather developed a sequence of little application that would allow me to mark the key positions on the image of the blank keyboard, render the keyboard with and without markings to be used in a deck of flashcards and write the CSV needed to import the deck into Anki.

During my practise with the decks I sometimes wanted to separate letters from non letter keys. So I created even more decks:

6 January 2016

IDE Shortcut Flashcards

From time to time I need to look up certain keyboard shortcuts in IntelliJ IDEA or PyCharm. (This would not be necessary would I use my proper keyboard always.) While there are official productivity guides, I usually just google the shortcut. There are plenty of pages listing the basic and more useful ones, nothing special indeed. But the one Google showed me the last time was special: 69 things you should know about IntelliJ IDEA by Krzysztof Grajek.

Remember theseThe list of IntelliJ IDEA commands was as expected, but at the end Krzysztof had put something new: flashcards. Flashcards are a great way to learn short facts. While I am aware of flashcards, I have not thought about nor used them since many years. I got curious and immediately downloaded them.

The package was an apkg, a file format used by Anki, a free flashcard application. According to Wikipedia Anki is most feature complete and available on many platforms, including smart phones. The apkg file is just a zip including a SQLite database, so it is pretty light-weight.

Unfortunately Krzysztof's original deck was created for the Mac version of IntelliJ, so I had to translate and verify it. Some shortcuts did not map to Windows keys (or were not available any more), so my IntelliJ IDEA shortcuts for Windows flashcards just contain 59 cards. There were several keys I did not know and a few I had never heard about. I recommend you instal the mobile version of Anki and start learning more shortcuts today!

There is also a community sharing Anki decks and I immediately looked for Eclipse shortcuts. I found a large deck of 91 cards for Eclipse, which - again - was created for the Mac version of Eclipse. I translated and verified them as well, which was much easier because I have been using Eclipse for more than ten years. Here are the Eclipse shortcuts for Windows flashcards.

Download 59 IntelliJ Shortcuts Win.apkg here. Download 91 Eclipse Shortcuts Win.apkg here.