Thursday, May 19, 2016

Keeping track of C++

During my ongoing push in the pursuit for knowledge in the C++ domain I identified various channels of information flow. They may be easily adoptable to any other domain but I'll keep my focus on C++. Let me describe them and elaborate a little bit.



  • Focused reading - reading dedicated books with structured knowledge. This one requires you to be concentrated for long periods of time and not to be tired because you will just fall asleep and not remember anything. If you don't have an e-book reader - get one.
  • Light reading -  reading more lightweight books: Motivation, productivity, Soft Skills (very underrated), etc. Books that does not require that much concentration. This is not C++ specific but it can help to keep the whole thing going. Usually done before sleep.
  • Podcasts - good for listening while commuting or shopping and an excellent way to learn diverse things. Listening uses different parts of the brain - being able to listen and comprehend is also very important and always could use some practice. Besides if you are not a native English speaker as me you can learn how to pronounce terminology and names.

    I strongly recommend CppCast. I'm currently listening to Software Engineering Radio too and I'm very pleased by the variety of things they cover. I've started from Episode 1 which is from 2006 and for now it is half history of Software Engineering and half theory (patterns, problems, solutions, etc).
  • Videos and lectures - CppConCppNowMeeting C++ACCU Conference for a start - there are enormous amount of very good stuff to watch. Unlike podcasts it require your visual attention and concentration but you can learn a lot. I think watching 2-5 videos a week is doable and probably more then enough if you prioritize. 
Advice: Increase the speed of the audio/video - the brain gets used to it and you can cover more episodes/lectures in less time.
  • Discussions, Forums and Twitter - this is the least time and concentration demanding channel. You can quickly scan discussions, twitter feed for something interesting while killing time and I usually use it to add articles for reading later when I have time/concentration (I personally use Pocket for an article container. It is easily used from the mobile). Here you can find different opinions by different people regarding very diverse problems. Good way to feed your brain with random and interesting information.

    For article searching - this is my Core C++ list on Twitter and there are several pages/groups on Facebook (notably C++ Enthusiasts) or you can just wait Jens Weller to gather them in his Blogroll.

    For discussions the C++ subreddit is the place to go and for advanced discussions - the ISO C++ Standard and Study Groups google groups.
     
  • Blogs and articles - usually it takes 5-10 minutes to read an average blog/article. There are a lot of good articles to read and it is not particularly demanding - some articles are tough but in general you can read one in 5-10 minutes or mark it for read-when-I-can-concentrate if it is a long one. Based my observations there are usually 5-10 good articles per week and it is somewhat easy to keep up.
Honorable mentions:
  • User groups - Nothing can substitute face to face communication. User groups are a very good way to meet people and make friends. If you can't find a user group in your area consider starting one. I am currently involved in managing such user group and we haven't faced any problems.
  • Fitness - sport gives you stamina and research shows that it helps cognitive skills. Everybody says it is a must and I'm this close to start exercising on a regular basis. I'll start tomorrow, I promise.
  • Teaching - If you want to master something - teach it. There are plenty of opportunities for teaching - you can make a presentation for your coworkers or for the user group or just for yourself, you can write a blog or teach at the academia (plenty of software academies nowadays). 
  • Time to reflect - this one is important and very underrated. Basically means take time to think about what you've done and what you plan to do and why you did not do what you intended to do. 
  • Awesome lists - there are several such lists - Awesome C/C++,
    Awesome Modern C++ to name a few - that are great source of knowledge.

As with every other problem keeping track of C++ depends on how you frame things: defining how you acquire knowledge and knowing yourself and your body (how when and what to learn from) is crucial.

I feel that all channels are important as they supply different type of information for different condition/availability and one should try to utilize all of them. Or at lest keep them in mind and notice if one of the channels is not used enough or worse - not used at all.

I found that thinking in this terms - just naming the information channels this way - helps a lot during the day to day or week to week planning. For example it is inefficient to scan twitter/forums for blogs to read if you have one hour - this hour is better spent by reading blogs and articles. Twitter/forums can always be checked when waiting for something. Or if you notice that you haven't watched any video or read any chapter from a serious book lately maybe you should find time to do that.

It is also good too keep track on your current condition. I often find myself having time to read but not the ability to concentrate so usually I watch a talk from the C++ conferences instead. If you are rested and can focus there is no point in wasting that opportunity on twitter or Facebook - better read some articles or a chapter from the book you are currently reading. Always have a book that you are currently reading.

Also remember - programming is learned through practice. Everything should be tried, compiled, debugged, improved, optimized, braked, benchmarked, unit tested (if you want), whatever. Without practice there is no learning.

And of course family and work are important too. And sleep - Sleep to remember! Remember to sleep! And recreation time (a.k.a. burn-out prevention time). A quick estimate suggests that around 30-40 hours a day should be enough so good luck I guess.