I need a training progression for academia and programming

As some of you might know, I am currently a fellow, aka at my personal writing retreat at Wolfenbüttel. And I decided to combine this with some sort of a training camp for my bouldering progress because you do need to have some breaks from writing during the day anyway and I can’t always watch Bones or create CV templates. You might have been following some of my bouldering on epigrammetry, the blog, or epigrammetry, the Twitter.

 

Training progressions in sports

Also very few of you might know as well, I used to train a lot for long-distance running (10k) during my teens. So I know what training progressions are. I used to have detailled training plans, eating regimes, supplements to take and all that jazz. I stopped at some point because my immune system kept bullshitting me and as an ambitious person, I couldn’t take the idea of having to start from scratch after a half-year of being very sick and weak. I’d had it with having to arrange my whole life around my training. Yet the principles I’d learned over the course of the years, plus the high level of discipline required in those persuits, have helped me a lot during my early university studies.

 

Systematic progress needs training goals

Looking back now, I used to approach studying and my ‘university progress’ just like I would have had planned my training progression. And it worked. I was really productive, things were going well. For me, at the time, this consisted mostly of getting all the translation homework done, reading a lot of Latin and Greek (at least an hour every early morning before starting my day) and getting through all the classics. Because I was fucking motivated.

This might have been due to there being actual goals to be achieved daily which I could measure my progress on. Like the speed, and thus number of pages, I would get through during my early morning reading practice. Back then, by the way, I also used to combine physical exercise with mental workouts like I have taken up again for this summer’s ‘training camp’. It works quite well. I should probably continue with it back home.

 

How do you create a training progression for programming?

My problem is now: Over the years, I seem to have gotten out of the habit of approaching progress systematically. Or, well not exactly, but – let’s say – I follow academic learning goals with a lot less zeal ever since I got my degree. Which probably is the case for mostly everyone else. Because it’s quite a bit harder to find time and motivation for non-goal oriented learning after a hard day at work than when you had all the time in the world to study. I really envy my youger self for having all this time for learning. I love learning. But life-long learning isn’t exactly the same and doesn’t end after your degree, espeically not if you’re an early career scholar. Now I have a vague idea of some skills I want to improve in. But I am very good with training progressions and thus I know that the common advice ‘just program a lot’ or ‘do a private programming project’ just really is crap advice. Of course, it’s true. You just need a lot of practice. But there still are ways of approaching this effectively or ineffectively.

There are some good books out there which actually provide some learning progression. There is John Sonmez’s Software Dev Career Guide which is the single only thing close to a book providing a progression to systematically get better at programming. And, who would have thought, he is an athlete too. I always thought I was the only one who wanted a systematic training plan. But apparently, he felt that need, too. And for good reason. I have already complained many times about why people don’t approach learning like training and still expect to get reliable, constant results. With learning, this systematic training approach is called ‘curriculum’. In the post linked above, I mentioned that I thought online programming platforms were the answer.

 

Which tools or medium can actually provide curriculum?

At the moment, I am at the point where I have let those online trainings slip again, a long while ago already. As it has happened to me multiple times over the years. If I can deduce from experience, I am likely or restart eventually and go crazy at online programming workouts for a while, then drop it completely again. But what you really need is consistency and daily workout. Plus, I can’t just do the apps. I always have a lot of books to read as well, which is quite important to me so they can’t be neglected either. But then I often end up only spending half of the time I would want to spend, read the book or, if you want to call it that, finish my ‘reading time’ and get tired after that. Also, I should already be at work, so I skip the programing workout.

While something surely is better than nothing, I should probably focus more on the practial work if I want to make faster progress. But in programming, that’s different from bouldering. In bouldering, it’s easy to see which routes I am capable of doing or whether I nailed a particular route. Or count how many pushups and pullups I can do (not enough, I have to admit). So I can measure progress easily. But with programming, this just isn’t the case. And in addition to that, for bouldering, there are tons of youtube gurus with mulitple videos each on how to get over plateaus and make progress, what you can work on, etc.

 

Willpower alone isn’t enough

For programming, most of the advice isn’t too good in my opinion because it’s often too generic (“get a project”). Bouldering tips are concrete like “Perfect your flagging technique”. It’s easy to look up how you do that. It’s easy to notice when you’ve got it, physical feedback makes sure of that. So I decided I’ll have to look at my programming workouts the way I approach my pushups for now (they need to get done no matter what and no whining around). But it’s not really a solution to the problem to rely on willpower alone. Willpower alone will ultimately fail once you get stressed or anything comes up. And when that happens, I have a really hard time getting back into the routine. Which I hate. And then I hate myself for not managing to and then the vicious circle goes on. It’s really annoying.

 

We need curriculum for systematic and swift progress

Of course, even with a good curriculum or a training plan, there will still be plateaus. You will still get stuck. But a good curriculum can help you over that last edge of the boulder. It can help you re-gather yourself after a failure or after you’ve let it all slack for a few weeks.

So this subject also makes me think with regard to this blog, it’s all the more important that curriculum gets developped for learning advanced LaTeX, so a willing user can make rapid progress. Rapid progress is good. It keeps you motivated. Plateaus are really dangerous because the can make you lose motivation and give on up the goal alltogether. So let’s find ways of measuring progress and collecting tips of what you can do to actively and systematically improve if you’re willing to.

Step one probably is to get the people to shut up who sneer at systematic approaches like this one. “Learning to program just doesn’t work this way”, they repeat time and time again. Yet I think this is not true. Getting better at programming is like learning any other skill. There is a systematic approach to it and when we have a systematic progression and training goals, we can figure out the steps we need to take.

That was it for now,

best,

the Ninja

Buy me coffee!

If my content has helped you, donate 3€ to buy me coffee. Thanks a lot, I appreciate it!

€3.00

Advertisements

Two basic image manipulation life-savers

In this post, I wanted to share a few tricks for simple image manipulation (with the goal of making pictures look better) I’ve picked up over the years. While tip one will always be to learn to take better pictures, maybe these little tricks will help you when you are asked to put the latest conference pictures online and realize they’re not good and really need a makeover first. So one thing will be to beautify event photos. Another tip I share is how to easily create a nice little vector graphic from a photo of some historical object or person.

First things first

This might seem obvious, but make sure you only use images you actually have the right to use. Check explicitly, don’t just assume! Get written permisson, if it’s not 100% clear what your rights are. If you are supposed to take pictures for an event, most people now mention that pictures will be taken in the event invitation already and that by attending, you agree to have your picture taken. Check what practices are at your institution.

Secondly, I am not a graphic designer or anything and fully self-taught in this realm. These tips work well for me and might work for you too. But just to make sure: I’m not actually competent to teach anyone on this topic 😉

Vector graphic from photo

I want to give you a few tips on how to create a nice vector graphic from a historical photo. Vector graphics make for nice logos, for example. Adding one can be all the spicing up a simple template or poster needs. It’s an eye catcher. They take a while to make if you want a good one (a few hours), but can be done on a train ride or during a meeting 😉 and I’ve never regretted making one and people loved them. Even though I’m not a professional logo / graphic designer and my results are far from perfect.

tikzposter-with-timeline
A TikZ poster for the exhibit “Lyrik des Widerstands – Richard Zach zum Gedenken”, PH Steiermark / Graz / Austria. It illustrates what I mean by “a nice vector graphic can go a long way”. At least I hope it does.

How to go about it

Scan very high quality if the image is from a book. Or take a high quality photo, reducing background elements if possible (will save lots of time later). Get rid of noise (Gaussian blur, 10px or something, try it). Then vectorize it, for example using Vectorizer.io: they will let you do quite enough if you sign up for a free account and disable your adblock. You can’t do very many images at the same time but since you’ll have other image manipulation taks to do in between, this will be just fine. Of if you’re pressed, use a trial account.  Or do Vectorization.org. I also like the Imaengine app. But you can only save the results when you pay a few bucks for the full version (worth it though). In this case, save it high quality. But maybe also get back to Imaengine only after you’ve cleaned out background elements you don’t need to add final touches. Play around with reducing the number of colour or adding some blur. But reducing the number of colours basically is the main thing you want to do. Maybe start with the smallest possible number of colours and go back up until you think you got the “feel” of the original image back, but without the details. (For example, with just two colours, you’re likely to have lost the original “feel”.)

Then the work starts: Manually get rid of patchy sections as well as all the background in GIMP. It will look a lot better and way more professional if you just take the time to do this (even if it’s not perfectly done). This is where you can invest the 1-2 hours I mentioned this would take. As I said, I am by no means an expert but I feel that most image manipulation things just take a lot of time and effort – they aren’t necessarily difficult to do. So even a beginner can achieve an ok result if they’re just willing to put in the time.

Edit: For getting rid of the background, you could also use services like Remove.bg to speed things up, as was pointed out thankfully by the #TeXLaTeX community on Twitter. It works super well with many types of photos. However, with my early modern print thingy, it didn’t know what the foreground was supposed to be: “Please select an image with a somewhat clear distinction between foreground and background. For instance, try a photo of a person, product, animal, car or another object.”

maierus
This image is a direct result of a vectorization tool and now you probably understand why we need the manual labour. The simplicity of the end result is the result of lots of work. But tweaking the vector output can help, too. This was made from a scan of an engraving depicting the early modern iatrochemist Michael Maier.

Manually drawing on the computer in an image manipulation program is not everybody’s thing an might take some getting used to. Many people will want to use a mouse for this. Don’t get discouraged by initial failures. It still is a question of practice and routine. You will, however, be able to get instantly better and more failsafe results if your base image is fairly big and you zoom in very closely. Start with baby steps. It will get easier once the most patchy areas are gone. Once you’re done, run it through the vectorizer once again to get rid of some of the small patchiness you might have overlooked or created while manually drawing around.

Delete the background. This can be done in multiple ways. If it’s all done in the same color, there is the option ‘color to transparency’ (or something like that). Else you might want to use the wand too and click delete or the like. Save (=export) the result. Voilà, your vector graphic is done.

maierus3
After you’re finally done with the manual editing done and marvel at your finished vector graphic, you’ll be so relieved you’ll start making pop art out of it. Believe me, I know what I’m talking about 😉 Oh, those train rides…

 

 

Some more tips

  1. To take into account: If the logo is supposed to be displayed very small, be sure to reduce a lot of detail. Always opt for 30% less detail than you think you need.
  2. Maybe make multiple logos or draw stuff on paper. Multiple quick sketches always yield better results than trying to get it perfect the first time. Fail fast and learn from your failures.
  3. Another win when using vectors is that you can output them as SVG or enlarge their size without things getting pixely. This might also be a reason you want to create a vector graphic in the first place.

Summary of a few GIMP shortcuts (learn some to significantly speed things up)

  • O = get the color (click)
  • P = switch to pencil
  • CTRL + C: copy
  • CTRL + V: past
  • CTRL + SHIFT + V: paste as new image
  • CTRL + SHIFT + E: export as (this is the ‘saving option’ in GIMP which will save the actual product, not the project itself – ‘save’ will save the project).
  • CTRL+Z to undo
  • paste (CTRL+V)

Beautifying event photographs

Use the GIMP Retinex filter

From my research into the retinex filter you should only change the bottom-most setting to adapt the filter. The stronger you make it, the less natural the result, the more noise will be created, the more colours will be enhanced.

retinex-filter3
With retinex, adjust only the bottom-most option “dynamic”.

Usually, the point will come quickly where you crank up the colours and sharpness too much so the result looks weird and gets a “steely” feel (try it out to see what I mean).

 

retinex-filter2
Overdone retinex. Colours ruined. “Steely” feel.

 

For more or less failsafe use of this if you want to achieve results that still look more or less natural: use the filter, then copy the product (CTRL+C). CTRL+Z to undo the effect in the base image. Then paste (CTRL+V) the version with the filter on top of the now reverted to its initial state image. Open the layer editor, click right: make the pasted section as a new layer. Then scale down the manipulated layer’s transparency to 50% (or as you like). The original picture will be improved without looking all unnatural. And you won’t have to take a lot of time looking for the perfect retinex setting. Just take one that looks ok. With the overlay, details will get lost anyway. And by the way, retinex will always create noise. The default settings reduce this to a minimum but it’s still pretty noticeable. So maybe use a relatively fine-grained Gaussian blur afterwards to make up for it again.

And maybe combine the effect with the “three layer trick” explained below. Play around with it. Find something that works for you. I’m no expert either but I found these tricks quite useful.

 

The three layer trick to bring out colours and contrast

Copy your initial picture into three layers. Desaturate the first to grayscale and invert it. Then do a light Gaussian blur on it, set its transparency to 30-35% and ‘merge down’. Then (you’re ‘on’ the middle layer now) set this layer’s mode from ‘Normal’ to ‘grain merge’ (‘Faser mischen’ in German), then merge down. This will bring out colours and contrasts better. However, if the colours are not nice to begin with, they will just be intensified as if you’d cranked up the saturation too much.

If this is no good, mabye try the retinex filter to bring out the colours and sharpen instead. I found this three layer trick on the internet somewhere in the past and sadly, can’t find it anymore. If you accidentally happen to know the source, feel free to point it out to me 😉

Other things you could do to enhance your images would be to tamper with the white balance or colour curves. But I decided not to add other stuff here to keep it simple and actionable.

both-filters
Left: initial image. Not bad, but I’m not happy because these wooden rooms always give nasty light. Right: image after having used both techinques explained above. First the three layer trick, then retinex. The result is not much different in the way that it looks “obviously manipulated”, but it does kind of look better and more professional, I feel.

Very basic ‘mini’ retouch for dummies

Select the eyes and increse colour and contrast. Select the skin regions where there are no lines (like the nose, elbow pit on the arm, etc.) and blur them – either manually or with the blur ‘pencil’. This will smoothen out impefections. Don’t overdo it though or it will be very noticeable. Don’t smooth over lines or the result will look comical at best.

The best image manipulation is taking better pictures in the first place

But, the most important thing is: Try to get hold of a good camera and take pictures in good light. I personally find it easy to take good pictures when the light is good but when you would need flash, human beings always look bad. At least if you don’t have a clue what you’re doing. So I try to avoid situations where flash is necessary when taking pictures of people. Maybe other people are better at this. But if people are not wearning tons of foundation and powder to mattify their skin, flash is not advisable and you might get better people pictures without it.

Also, ever wondered why models spend so much time on makeup before photoshoots?That’s because image manipulation can only do so much. The better the pictures you start out with, the better the result.

Conclusion

So, these were some simple tips. I’m not really good at this myself but I’ve been doing it for a few years. These little tips have helped me in situations where, for example, I was asked to beautify some snapshots of the last conference. My experience is that your suffering will be minimized when you have good light and can bring a good camera. This is the most important part. “Repairing” pictures taken under bad circumstances and making them look good is a really hard task. But making mediocre shots a little better is something you can learn. But then again, if you only need small pictures for social media, phone apps offer filters to improve your pictures with a few clicks. So maybe it’s not even relevant for you to “go traditional” and use GIMP at all.

Hope this helps someone,

best,

the Ninja

 

Buy me coffee!

If my content has helped you, donate 3€ to buy me coffee. Thanks a lot, I appreciate it!

€3.00

Don’t call it a database!

When I started this blog, one of my promises and goals, apart from LaTeX-Ninja’ing, was to demystify the Digital Humanities for non-DH people. For a long time I have watched and I think one of the big mysteries of the DH still persists in Normal Humanists’ heads and thus, really needs demystifying. You might have guessed it, I want to explain why DH people will cringe if you call digital resources ‘databases’ which are not, technically speaking, databases.

Is it ok to call any digital resource / corpus a ‘database’?

We know, that’s what you tend to call a digital corpus. But in most cases it’s not correct, it’s a pars pro toto. A database is just one possible technical implementation, but the term is used more broadly for any ‘digital base of data’. By laypeople, at least. A pars pro toto stylistic device is a Humanities’ thing, right? You do get stilistic devices. So you can also understand why you shouldn’t use imprecise terminology. You don’t like it when people misuse your fields’ terminology either and probably make quite a religion about it.

If you want to work with the DH, you need to understand their terminology and respect it by using it correctly. Even though it might initially feel unintuitive to you. Believe me, you will adapt quickly if you give it a try.

I’ve caught myself so many times now, educating my Normal Humanist friends about digital resources and why my (DH) colleagues won’t take you, as a Humanist, very seriously if the word “database” slips out your mouth at inappropriate moments. It’s kind of like the Tourette’s of NH-moving-in-a-DH-world. Which probably is not a politically correct analogy. No offense to people who actually have Tourette’s, I don’t want to devalue or disrespect your struggle in any way! It’s just analogical in the way of spluttering out inappropriate words at inappropriate moments.

Everybody has their cringe-prone terminology item, right?

To be honest, I am not sure how strict the English speaking DH world is in this, but I can guarantee you that this distinction is very valid concerning the German language use of “Datenbank”. When a quick web search yielded this result, I wasn’t sure anymore if it’s actually a thing in English too. Digital Humanities at King’s College define a database as follows:

Database is the term we use for any large collection of online material.

( https://libguides.kcl.ac.uk/dighum/dighumdbase )

This, however, is exactly the way I don’t suggest you use this term. I am aware that this is the association linked with it in many people’s minds. But hey, you are Humanists. You do have a sense for the intricacies of terminologies, right? I, for one, really hate it when people use the wrong gender on the term corpus (in German: neutral (!) for a collection of documents, so always neutral, unless you mean an actual body like that of a musical instrument). You probably have a thing like that, too, where you get furious at laypeople saying it wrong, don’t you? Well, the DH equivalent of this thing is the misuse of the term database.

Using terminology correctly is a sign of respect towards the DH community. It shows you respect us as researchers and don’t think of us as the ‘idiot who does the tech stuff’

Well, to be exact, it’s not even a misuse. You sure can use the term database in this way and it’s not, strictly speaking, completely incorrect. It’s just misleading, and – most importantly as the subject of this post – it is a strong pointer to the fact that you are not very tech-savvy and either unaware or else disrespectful of digital terminology. It will be seen as either a lack of respect and esteem towards the digital field or, I don’t know which is worse, a lack of competence in general. You would deem it impolite, too, and probably take it as a sign of general incompetence or lack of intellecutal ability/openness  if a DH person came along and persistently misused your terminology, right?

Edit/addition 2019/06/04: I think this issue is less about whether it is technically or theoretically correct to use a term like this or like that. It’s a question of being ‘politically correct’ and of not hurting people’s feelings. To show the point on an extreme example (which is maybe exaggerated applied to databases but illustrates the point): you could theoretically argue that the term ‘nigger’ has been used historically to mean ‘person of color’, ergo it would – terminologically speaking – not be incorrect to use it, right? Wrong. In this case, it’s obvious (to everyone, hopefully) that it would be extremely rude and not ok to call a person of color a ‘nigger’ nowadays. Nobody would be confused if people’s reaction to this was to feel insulted because the above explanation does not take connotations into account.

Like you could say that before the advent of the DH, it maybe wasn’t a big deal to throw around the term ‘database’ to mean any digital ‘base of data’, but since the DH is starting to be established as a discipline and not only as a tool like it might have been in the beginning, things have changed. DH people sometimes feel like their competencies are not taken seriously because their part of the job is seen as the ‘handiwork’ whereas the non-DH input data is the actual research. I think that this latent inferiority complex, or maybe rather some sort of struggle for recognition, is the reason non-precise use of DH-related terminology is sometimes taken bitterly.

So ultimately, it’s not about being right or wrong. It’s about being respectful and not hurting other people’s feelings. Also, non-DH people insisting on using the term in a non-DH way while simultaneously wanting to participate in a DH project will cause a clash of terminology. It might be ok for a non-DH person to use the term like this, but DH people are kind of bound to use the term in a strictly technical way or else they might be seen as incompetent of their own field. In this case, I think the non-DH person should give in because even when they will not be judged by their use of DH-specific terminology, a DH person will. You don’t want your imprecise language to reflect negatively on your cooperation partners.

Since the initial publication of the post, I received the feedback that some people with technical backgrounds are quite open to non-technical uses of the term ‘database’. But from my own experience of the DH overall, I feel this is not necessarily representative. And only because people will accept that it is theoretically valid to use the term to one’s own judgement, that doesn’t mean people will condone it in practice.

If you want collaboration, start actually collaborating by learning about DH terminology

Especially if you are trying to get a collaboration DH or label DH project, I suggest you prune your language a little bit here. After all, DH people usually have lots of people queueing to get a project with them. They will tend to take the ones interesting for them (in terms of subject) and/or those where the applicants seem nice. And it is deemed base politness to research your collaboration partners’ field so you don’t draw a complete blank. You want your partners to be understanding and reasonably well-educated on the baseline of your field too, right? And you probably catch yourself sometimes, secretly saying to yourself in indignation or disbelief ‘How can any academic not know that?! This is completely basic!’

Well, it happens to DH people, too. Often concerning so-called ‘databases’ which are not, in fact, databases. If you persistently use the term wrong, it’s seen as lack for trying or plain incompetence. Don’t be rude. Now you are aware of the problem, you have no excuse to continue saying it wrong.

How to know if it’s ok to call it a database?

Two questions to ask to get a feel for whether what you mean might actually be a database:

  1. Would it make sense to represent this data in an (Excel) spreadsheet? Then it is likely someone chose a database format to represent it digitally.
  2. Are there any other fitting means to represent it? Only because it outwardly looks like it stores spreadsheet-formatted data, this doesn’t mean it’s they way data is stored “behind the scenes”.
  3. In case of any doubt whatsoever, just refrain from calling it database. Just say ‘digital resource’, ‘digital corpus’ or basically anything else which seems half appropriate. Anything else is way less stigmatized and cringe-worthy than the misuse of ‘database’.
  4. So to be on the safe side: Just don’t call it a database unless you’re sure it is one (technically speaking). When not 100% sure, just term it a digital resource or digital data collection. I know you just mean a ‘digital base of data’. But please respect that the wide category ‘digital base of data’ doesn’t mean the same thing as the narrow term of ‘database’ in a technical field.

Just a little thought – hope this helps!

Best,

the Ninja

PS: Can someone tell me whether you think it is valid to inform people they should not use the term database or would it be ok with you when they use the term in a non-technical way? I only know that people around me react quite aggressively when you do and will think you’re a technical layperson, thus not trust you much once you did. You’d basically be ‘disqualified’ after that unless you really have some very interesting other assets or extremely good grant acquisition records or splendid networking connection value.

 

Buy me coffee!

If my content has helped you, donate 3€ to buy me coffee. Thanks a lot, I appreciate it!

€3.00

How to improve at programming when your current position doesn’t require it & Online Learning Resources

Have you ever felt like you would like to get better at programming, maybe even get a position involving more programming some day but the fact that you currently don’t really need it at your current position seems to hold you back? This post is for you.

Daily practice is key for improvement

You need daily practice if you actually want to improve. You already need daily practice just to keep your skills sharp during a time where you don’t need to use them. Also, if you don’t even have programming skills yet, you probably are too tired after work to sit down and work on a private programming project.

But you should. Programming is a skill which takes a long time to learn. That is, if you want to reach a decent skill level. This means that you have to start regular practice long before you actually need that skill or need to apply for a job, if possible.

The common advice: Find a starting out project to program in your free time

When I first informed myself on this, the most common advice was to find a cool project and try to program it in your free time. But I found that when you don’t have an idea for such a project which makes complete sense to you, you’re not going to go through with it. Without an acutal, urgent need you probably won’t sit down the amount of hours necessary to actually make progress. At least the great majority of people wouldn’t.

Then I tried setting myself mini-challenges. This was a good idea. But there wasn’t a lot of guidance (obviously). This, in return, was discouraging and wasted a lot of time. Of course, time well spent learning something. But since I am really interested in effective learning, I felt that I was wasting time. Effective learning is always better than just playing around. You need curriculum. At least some. That’s when I found out that there are a lot of competitive programming sites which offer useful short exercises where you can do one per day.

Before that, I had tried all sorts of “Learn programing” sites like SoloLearn, freeCodeCamp, the Enki app, just to name a few of my favourites. But really, I didn’t like them all that much. They went through the syntax of the language and that was it. Like learning the vocabulary of a living language but never using it.

Review of some of the materials out there

Here, I want to share links to all sorts of learn coding sites out there. Of course, it’s not extensive but I think it does cover a good few of the most important ones. And maybe has a bit of a different perspective from most other “here are 30 sites to learn coding for free” blog posts out there.

A constraint for me was that the site had to be completely free of charge. So, for example, DataCamp is a no-go. Although, I have still linked to some pay-sites in case you are interested.

But especially as there are so many pages where you can get a similar service for free, I don’t see why I should pay for one of them, when there are so many alternatives available. If it were really brilliant, I would probably pay for it, in theory. Like HackerRank, I like so much at the moment, that I would probably get access for a one-time payment. But most of those apps and sites ask for monthly payment of up to or even starting at 10€ – that is a crazy amount of money and you already get books starting from 10€. I personally would always put more trust in a book in terms of quality and the hope that there might be a logical progression to the teaching; and thus, rather go for that. Also, I just don’t do monthly subscriptions. They eat so much of your money and mostly, when you sum it all up, are not really worth it. 

Also, the amount of sites (plus all the apps!) out there has become so huge, it’s really a full-time job to check them all. That time might be better invested in just picking one and learning to code. These other sites that I found initially focused more on interview prep for experienced programmers or programming contests, but many of them have actually developped training tracks. They also tend to offer a broader range of subjects than many other very popular sites which focus on web development (“coding”) mainly.

Enki app

I had liked the Enki apps daily workouts, but the learning progression was not stable. They give you a random tutorial every day. This was not very effective and I quickly was through with all of their material. Ergo, the workouts started repeating very quickly.  For more, you would now have to pay monthly for access which I am not willing to do since learning-wise, it is not sooo well done. It was really good for a free site (for a while I used it a lot), but not good enough to be paying for it. Sadly, I have experienced this with most of the sites I have tried (and I have tried quite many).

App-wise, you will just get the Enki review here. I tried probably all the most important apps out there. But mostly, in their way of just explaining the syntax of a language, the progress was slow and it was ineffective for me who already knew most of the syntax. You usually can’t skip much or speed up if you’re getting bored. Still you never get any actual programming done which I found both useless and frustrating. Having tried all the apps and “learn the syntax of XY” (disguised as “Learn programming language XY” which is not the same thing, in my opinion), I now found competitive programming sites to be more what I had been looking for. 

Some of them don’t have all the languages you might want, especially the smaller ones and the web dev focused ones.

 

General-purpose learning sites (video-based, MOOCs, etc.)

Many popular sites (Coursera, Udemy, Udacity, Khan Academy, MOOCS like edx, OpenMIT) are video-based and I don’t personally like that. I prefer interactive sites where you can type your code directly. But well, now you have the links to those resources as well.

Online books or blog tutorials

Even though I have a tutorial blog myself, I personally would not try to learn a programming language from a blog. Sometimes you find useful posts for a specific problem you need to solve, that’s mainly what they are good for. I just think that the available interactive things are cooler for actually getting programming experience as a novice programmer.

Youtube tutorials or channels

Some posts on free “learn coding” resources recommend Youtube tutorials or channels. This is, I think, a valid point if there really is an excellent tutorial video out for exactly what you want. So, if what you want isn’t uncommon, there is likely to be one. Sometimes a 5min video can save you an hour of reading a tutorial. But I find that hardly any channels offer sensible curriculum for a motivated learner, so I’m not sure how much you would get out of it in the long run. That’s why I won’t recommend any here.

Sites just/mostly teaching the syntax of languages

 

Many of them are gamified as well

Sites I really like for practice / or of the type I like (challenge-based)

Learn the language tracks are available on for example: HackerRank, HackerEarth (teaches algorithms).

With Hackerrank, for example, I really like their testcases. They don’t just ask you to write a solution on your own (sites like SoloLearn, Codecademy hardly do that in their regular curriculum), they also provide testcases where, for example, overflow is bound to occur. So with every single test you are reminded to remember that. This is a good reinforcment method in  teaching, I think 😉 Also, have I mentioned that supposedly, the only thing which really works wonders in teaching is getting tested? So forget about what learning type you are (visual, audio-visual-bla, etc.) and become a tester. You can skip some of the testcases of course, but the frequent reminder still works wonders. Also, you can learn from other users good (high-ranked) solutions. Especially in algorithms, it’s really worth checking how more experienced programmers did it. However, these competitive programming platforms do kind of encourage bad programming style (and dirty hacks to improve speed), so be sure to take care of that yourselves. Be persistent disciplined when it comes to using good style! And remember to still work on bigger projects every once in a while, since the daily practice from these sites is just one single function without context.

Learn Catch the Flag / Hacking

Also, if you’re interesed, these are some sites where you can learn CTF (catch the flag), something like competitive ethical hacking.

Other / Tutorial-based

More tutorial-based sites which are useful but not for the kind of rapid learning I recommend:

Resources

Also, check these other posts on free coding resources:

 

Buy me coffee!

If my content has helped you, donate 3€ to buy me coffee. Thanks a lot, I appreciate it!

€3.00

Your 24 hours. Time management or How to get to know yourself while organizing your life. Part II

Today, I am yet again happy to present the second part of the latest LaTeX Noob guest post:

 

Last time, I told you about four important steps to organizing your life. They were:

  1. Know your priorities.
  2. Learn to say “no”.
  3. Leave your comfort zone.
  4. Never back down.

If you want to re-read the last post, you can find it here!

So, time management.

You will need a calendar, let’s start with that. Take your phone, open your Google calendar. Start. It is actually that easy. You have to know the most important basics. When do I work, what are my main working hours? Do I like a silent or slightly more lively environment for my work? Am I a morning person or a night owl? When will I need a break, when do I want to go to sleep?

When am I meeting my friends, when do I spend time with my partner or my family? What do I do for relaxing? How often? Exercise? Any activities? When and where?

What is there to do on household chores (you know, cooking, cleaning, gardening etc.) and when are they due?

Just write those things down. Think about it. It is creepy at first sight, I know, but hey…

Labyrinth-Girl

I am a morning person, I like to start early with my work.

I love good instrumental or orchestral music during work. I like other people around me while I work, because of the swift “office-noise”.

For relaxing, I like reading, listening to music, going climbing, watching TV, taking long walks, photography, writing, people-stuff (friends and family).

Basic week:

  • 4 work days, Monday to Thursday = 30 hours of work
  • 1 “thesis day” (also called somehow home-office)
  • 1 university course to teach and prepare
  • 4 university courses to attend and prepare
  • one evening to go climbing
  • (at least) one evening to have dinner with my partner

An example week

I will give you my five days of my working week in my calendar now, just as an example and to show you how I work on my organization and how I try to plan my days. You may have got it until now – it is all about your own rhythm: find it, then stick to it.

Monday

7:00 start work

15:00 short coffee break with friends

17:00 back home, dinner

18:15 climbing (1.5 to 2 h)

  • hair day, bathroom cleaning

  • prepare courses

22:00 bedtime

Tuesday

7:00 start work

10:00 Coffee break with colleagues

18:00 back home, dinner

  • washing clothes

  • prepare courses

  • TV/Dinnertime with my partner

22:00 bedtime

Wednesday

7:00 start work

10:00 teach my university class

12:00 lunch with friends

15:15 university course 1

18:45 university course 2

20:30 dinner with colleagues

22:00 back home

23:00 bedtime

Thursday

7:00 start work

13:00 end work

13:30 university course 3

15:00 prepare next course (learning a new language for work)

17:00 university course 4

19:00 back home

22:00 bedtime

Friday

7:00 morning routine

  • Thesis Day

  • kitchen cleaning

  • washing clothes

  • shopping supplies

14:00 lunch with my partner

15:00 beginning of my pre-weekend

Weekend

Normally spend with family and/or friends and /or partner – and sometimes spent with reading texts or papers connected to my research field

Conclusion

So I actually do have some kind of private life, but I have to organize it in a very strict way and I have to be very strict with myself sometimes. I am a morning person and I am in the possession of a “daylight alarm clock” – you know, it starts with deep red light approximately one hour before your actual alarm time and continues getting brighter like the sun rising, so your body can wake up before you actively open your eyes and wake up in your head. It works! At least, for me.

I need my bedtime set earlier now, so around 10 pm I am really grateful for a warm and cozy bed and sleep. I enjoy resting in my bed on the weekend, this is a fact, but it is like a reward I promise to myself.

I am still meeting my friends and I have still a lot of other things to do in my life, things which I enjoy and which are keeping me relaxed and sane.

It’s worth the hard work. You just have to start.

Some thoughts on grading

Grading is always a touchy and emotional subject. When students misbehave, you automatically feel the urge to punish them with a bad grade. When students receive a bad grade, they will be angry and pissed off. And ‘bad grade’ is relative to what they expected, not ‘realistically bad’, like in a fail grade. In most cases, they will also think you are unfair if they honestly expected a better grade. And they will be gradually more pissed off, the more work they put in your class. So make sure you put as much thought into planning your grading scheme as into the rest of the preparation, because the grade might just leave the biggest lasting impression on students looking back.

 

The good student receives bad grade problem

I just cleaned out my old archived data and remembered I had this class with a teacher I really liked. But now, I hardly remembered her. Then I realized it probably had something to do with a weird bad grading situation that had left a sour taste with me.  Also, it happens that situations like this (and I defintely had more than one) were always in the Linguistics department. Anybody who knows me is aware that I am a language nerd, I love dialects, etc. I came to university really looking forward to studying Linguistics. Now I hate it, not because it turned out I disliked the subject but because of many bad grading situations where I felt treated extremely unfairly.

This particular teacher had doted on me during the class. I also loved the subject and participated a lot. Then I handed in the paper, and I don’t remember exactly what the problem was, but she gave me a really bad mark and said I could only turn it into a positive one, if I made major changes. A C, to be exact! Which was as good as a negative mark for a student like me with overall high marks. This would ruin my GPA. But then again, I had such a tight schedule that I couldn’t afford just redoing this class. This whole situation came as a huge shock to me. I felt I had written an ok paper, as far as I was qualified to judge. It was in my fourth semester only, so you probably can’t expect a publication-ready work. It would have been be ok if I had felt I had put in minimal work only and performed badly. But I had honestly really tried to write a good paper. And it’s not like you generally get a lot of help in how that is actually done. I’d given it my all and ended up being treated like an abysmal student who had personally offended the teacher by handing in such a bad paper. Also, once I already knew that the only thing I could do is rework the paper but would still get a grade which would ruin my GPA, I was not exactly super-motivated to put in a lot more good work.

I had seen the papers my colleagues had handed in, they were obviously less good than mine (from formal standards already) and left an obvious impression of having been done carelessly in a haste. I was profoundly shocked. Maybe the teacher had taken to me so much because she had seen herself in me and thus, expected a publication-ready output. The teacher was not very experienced either, so this misconception might have easily happened to her. Since, of course, I was only in my fourth semester, I was not able to deliver that level of high quality she had expected from me and thus, graded me way more strictly than my less good colleagues.

 

If a good student underperforms, ask what went wrong instead of lashing out on them

Dear teachers, something like this happened to me mulitple times and is a surefire way to make your students hate you in retrospective. You don’t want your best students to hate you, right? They will talk badly about you (as I sure did) and ruin your reputation for generations of new students to come! Especially good students will get very angry at less-good-than-expected results since, unlike really bad students, they probably actually care about their grade point average which you just ruined!  Some people’s stipends also rest on this GPA. Don’t be so quick to give out bad marks to students of whom you would have expected more. Try to clarify what the problem was instead of just being angry. That’s just childish. Don’t let students’ outputs scratch on your ego. Students probably really don’t care about you all that much and if they did, they sure don’t have a positive impression anymore now. Maybe it was all a misunderstanding? Especially if you had expected better result, it’s obvious you should investigate what happened.

Beware of thinking a good student is you. Don’t expect your good students to be scientists. They are not, despite their apparent motivations to be come full-blown researchers one day. By ruining their GPA, you actually negatively influence whether they will one day be able to become researchers.

 

On silence and introverts in class

Silence does not mean disinterest, like many teachers assume. It might just be that they’re an introvert. And even though they might have participated in the beginning of the course, stopping later might not mean disinterest. To give a personal example, I often participated very actively in classes I was interested in. But then the teacher focused so much on me that I felt awkward and didn’t want to be the center of attention anymore. Actually I had never wanted or intended to become the center of attention. I therefore stopped participating because being the center of the attention made me feel uncomfortable. This, the teachers usually took as a horrible insult and were furious.

In multiple cases, I ended up with a really bad mark despite knowing (from having seen my colleagues papers) that my work had been well above average, if not even very good. Already formally, my papers were a few classes above those of my colleagues because I had way more experience writing papers than them. These times, I first wanted to complain. But then I was so annoyed that I never talked to the teacher about it. One teacher even told me my paper was an A but they would make it a B because I had stopped participating. I didn’t want to confront them and was ok with a B because, after all, it was true that I had stopped participating and found it to be their good right to take a grade off. A B, after all, would not hurt my GPA in bad ways. Then they put a C in the online system. That was pretty mean, seeing as my paper really was quite good (without being too fond of myself, but I had worked on that particular topic for a long time in another context already). The teacher offered no explanation for this behaviour except being hurt personally and stressed many times how good my contributions had been.

I’m sorry, extroverted teachers. Have you really never thought about the fact that it might be uncomfortable for a good student to be called out to answer questions all the time? It makes your fellow students dislike you. Please don’t take this as an insult and also, definitely don’t base your grading on it! You are scaring away good students. I continue to dislike this particular teacher after years. The lasting impression was extremely negative. This didn’t happen only once either.

 

Grade using check-lists to avoid mixing in personal emotions

I handle the problem of grading by having a check-list with points. So I don’t “grade” or hand out marks – they score on a check-list. That way, I as a person will not be the object of a student’s hatred. A lot of people actually recommend to do grading this way, especially if you’re still young or lack authority for whatever reason. That way, I can act like a mentor and trainer during my (very workshop-style) classes and still be fair in my grading.

Of course, coming up with these check-lists is some work in the beginning but it is very fair, good practice and will save you lots of trouble once complaints come in. And they will at some point. Another technique I find very useful is to ask a lot of the students (greater amounts of portfolio work to be done, in my case), but then am fairly easy on giving out points. That way, they feel like I grade so nicely, but they still have done more work than they would have otherwise, so it’s really ok when they all get very good marks.

Would be happy to hear how you handle these situations,

best,

the Ninja

 

Buy me coffee!

If my content has helped you, donate 3€ to buy me coffee. Thanks a lot, I appreciate it!

€3.00

[Guest Post] Your 24 hours. Time management or How to get to know yourself while organizing your life. Part I

I am happy to introduce the second guest post by our friend, the LaTeX Noob. This time not on LaTeX 😉 So, here we go. Enter the Noob.

 

I am currently writing my PhD thesis and, hell yeah, it is rather pleasant, because I am good at getting sh*t, I mean, stuff, done. Now, I will tell you how this is possible and show you how to achieve that too.

 

Before time management, find structure in your life first

However, it was not always that easy and organized. I have to admit I am generally a structured person: I like notebooks, I do keep a bullet journal and I love calendars to organize my life. But how to get the great amount of work together with one’s private life (for we all love our family, our partner, our friends, and we want to spent time with them, right?), enough sleep, healthy eating, some sports, some Me-time?

The ways of time management are paved with many books, tons of good advice, and many expectations – but, essentially, always depend on yourself. This might sound like a yoga mantra, but only you can be the best version of yourself. Therefore, before getting into structuring your life, you have to reflect on yourself and on your life.

This is like our Ninja’s post on why courses on learning how to program go wrong most times. You cannot start with an expectation to be the best structured and organized human being in this world just from zero to hero – no, it is hard work. However, I can give you only some advice on how to build your organized self, but it will take its time.

Self management first!

1) First things first: Know your priorities.

What do you want in life or at this moment? Is it your PhD – like for me – or is it the next career step? Is it to spend more time with the people you love? Is it to get enough Me-Time, quality time for yourself, to caress your soul etc.?

2) The next thing will be: Learn to say NO.

Let’s say, you are planning your life as a graduate student, like I do. You have a job, you have to write your thesis, you have to relax and practice self-care. So, the important word is “no”. You have to know when you can and when you should use it. Trust me, sometimes this is really hard. However, you, your mind and your body, are your resources, so be careful with them. We are living in a hard world, full of burnout and bore-out; we have to be careful with our resources. That should be clear.

Of course, there are some situations, where you have no choice – you have to give everything in this specific moment. So, please, imagine, you have to give everything, but are very stressed out because you never take a break. When you are constantly giving everything or nearly everything, you have no resources left for the moment you will need them the most. Easy enough to understand, I guess. So, just take care and take a break when it is necessary.

3) Leave your cozy cavern.

The next thing is: After you know how to use the word “no”, learn to be fearless. One only grows with new situations. Therefore, if you really want to get to the next level in your life, you have to leave your comfort zone. Moreover, as always: Start with the tiny steps and the little things. It will be that you make a terrible fool out of yourself, as it happened very often to myself, but hey, we can get up again and try the next time. This leads us to the next step.

Ninja’s addition,  a nice quote: “Never be afraid to ask. Someone might be willing to show you her answer to your question. Despite all the necessary baby steps, it is OK to aim high. Always aim high. But you have to do all the baby steps in order to eventually get there. ” (Karl Posch, A Lesson On Programming, Graz 2018. p. 177. https://kcposch.wordpress.com/

4) Never back down.

Just because you are making a fool of yourself, your life does not end, you know? I know of what I speak here, because I had some tough times in my life, but guess what – they are past and gone now. I cannot act like they never have happened, but I can cope with them. Sometimes, there are dark days where feelings like shame will hit you hard, but still, you survived all of your worst days so far. You are doing great. Therefore, never let them get you down. You have to try again. You have to work on yourself.

My four steps

Now, this should be a post on time management and somehow it came out as what – four steps to be a better person with self-care? Well, yeah, seems like that. I will end this post in giving you an example (actually, I am talking about myself, because that will be a very valid example) on how you can do all these steps.

1) My next step is finishing my PhD – and I have a job at a research project, so two deadlines and some pressure. However, I want still see my friends and my family and spend quality time with them, next to time alone, because I love to read, alone, in my room. So, how to do that?

I have timeslots in my workdays, where I go and have a cup of coffee – actually taking a break after some hours work, but also meeting friends and talking and laughing. Next thing, I meet some of my friends in our climbing hall, because we exercise together. With my partner, I look for one evening in my workweek, where we will have a cozy dinner together and watch TV on our couch, talking to each other about the current important things in our lives.

2) I am the one who will stand next to you, cheering on every good idea. So… guess, who always has a very hard time on saying “no”? Nevertheless, I am trying to make my choices consciously. I have to work 30 hours on my project, so I try to work hard in this time slot to get my project stuff done. Always giving the best I can and certainly leaving after 30h. I get up early in the morning and work for my thesis. I have some free evenings that way (as long as I can go to bed around 10 pm). On my weekends, I have no plans for work, just for people I love and for me and myself. In addition, if there are some extra tasks that I have to do, then it is like that, but if they are unnecessary, come often and just lead me in the wrong direction, I will say “no”. It is a very complicated game to play, very complicated, if you are working in academia, I know. This might fill another big discussion on how much unpaid work to do and when to refuse, etc.

3) Leaving my comfort zone was and is very hard. I gave talks at conferences which scared the hell out of me. Back in my classes and university courses, there were always people who liked me, so I had support, you know. I am actually a very good presenter, but in front of strangers…?

I practiced my talks in front of my mirror, in front of my boyfriend, in front of my parents. I learned to live with that fear (a fear I cannot name…). I am one of this kind of people who are actually frightened of calling strangers on the phone or writing emails to strangers Yes, I am weird, it is called being an introvert. And it is not helpful, knowing that many people telling you that you actually have to be an extrovert, because of – *insert any reason*. It was getting on my nerves, but then I got it – you cannot see that someone is introvert. You can see that a person is nervous, but that does not mean that this is an introvert. So, deep breath and go.

4) I rushed into very bad situations very often, but I survived them and I am somehow getting over them. It takes time. I had actually a very hard time in learning that all those things take time. You will have to give yourself that time. Moreover, for your next try, just try to make it better in some way. I am trying not to be afraid when I know I am right and the other person is definitely wrong. Introvert-style, you know. Nevertheless, no, I have to stand up for my opinion and my thoughts. In addition, if there is a mistake in my work, I will correct it, but you have to show it to me first.

Time Management part follows in the next post

Now we can dig in the dark mystery of time management, if you still want to. Next time, I will tell you on how building good habits to strengthen your workflow and organization. However, remember, it is always your own life, your own time, your own way. Everybody has the same 24 hours a day. You just need to make them count.