Employees who are involved in software development, both programmers and non-programmers needs to stay up to day with their respective fields. In this post I will talk about how I stay up to day, in the fields I like and find most relevant on a daily basis. These practices can also be applied in other software development fields.
So first let me state the fields which I focus on, when staying up to date:
- Parallel Programming and Computation
- C/C++ Programming
- Ruby Programming
- Open Source in general
- Programming Languages
So there are a few additional fields, but these are the one I primarily focuses on. The reason I mentioned the fields are so you know where to look for information about these specific fields. Now let us continue with what I do, to stay up to date.
Most people know the web site Reddit and use it to find funny posts and stuff like that. However, a lot of people does not know that there are a lot of serious sub-reddits, which are pages dedicated to a certain topic. Among these sub-reddits are a lot focused on software development, programming and *NIX, so right down any software developers ally. The reason I will recommend these to stay up to date is, that for instance /r/cpp continuously contains information about what is currently being discussed to become a part of the C++ standard, what as been accepted, and what has been dismissed. Giving a good ground for following the development of C++. Furthermore, there are also a lot of open source developers whom post on reddit when a new version of library is available or if a new library has been published. This do not only matter for C++, but for almost any programming languages you can think of. Some of my favourite language sub-reddits are:
There also exists sub-reddits for the remainder of the topics in the list above, and I use them all to gain new information and stay up to date with any given topic. I further more recommend, the following sub-reddits:
Some might wonder, why I have not recommended /r/bsd and /r/openbsd, the reason for this is that I fairly reason was made aware of their existence and do not feel I can give a proper recommendation yet. However, I will say that so far, a month in, I think that the content is of a high quality in general and the tone is very sober.
Mailing lists and newsletters
What are they not dead yet? NO! Mailing list may be primarily from the prior century, but they are fantastic. First off you can get help through mailing list and by reading others question you can even get smarter and more up to date with techniques you might even not know existed. Furthermore NEWSLETTERS the king and well of new information, where the creators of a programming languages, a technique, a compiler, a library, or something fifth, explains what is new, what is old, what is removed and so on. This often gives an in-depth understanding of the changes which occur to a project you use. Often newsletters also provides links to blog post or white papers which goes more in-depth with the changes allows you to get a very update view of what has been done. Therefore I use these two options to get new information.
I primarily uses newsletters for:
Bonus info mailing lists also sometimes contains information about meet up opportunities which you will not find on any webpage.
Blog posts are close to the holy grail of getting new information for a software developer. This is due to two reasons: Firstly technical blogs by companies and individual project developers. These blogs tents to go in to detail about a specific topic and covers what is new and how to use the new stuff or may be cover a feature in-depth which you had never heard of. Therefore these post really expands your knowledge of the project and teaches you something new.
Secondly are developer blogs, these are not by developers developing a particular product, but using it in stead. This type of blogs have a tendency to be brutally honest, though coloured, and therefore gives a fantastic view of how good a product or technique is and by such informs you if it is worth you time.
So these two types of blog post are actually the reason I primarily recommend blog post and I find information about all topic via a blog post. I will, however, not recommend any specific blog or author, but rather say log on to feedly and navigate the different RSS feeds for nerds, software development and programming to find those you find the best, did you know I provided an RSS feed?
Research papers, articles and technical reports
Now I know that most do not think that it is relevant for them to know the latest research, but it is, just accept it. Go read some research papers, it will give you a wink in the direction of where your field is going and what the next path will be. Of cause this is also often a bit harder to read and understand but I sincerely think, they are worth a read.
I predominately use google scholar to find research resources.
Now I primarily uses these resources to find information about parallel programming and computation, and compile design. But there are tons of fantastic papers about almost any subject.
Ah the magical world of youtube. Youtube is a platform for distributing free videos to the masses, just in case you did not know that. Some companies, conference and developers have taken to youtube to share material about subjects, project, and products. Where they provided videos explain a topic and or a product and how to apply this in a real world scenario. A youtube channel I personally are very fond of is CppCon’s channel, where I find a lot of good stuff about C++. Again here I will not recommend a lot of specific channels, go look for your self it is awesome.
I hope this gave you a tool box on how to stay up to date with some of your favourite fields. So happy hacking.
_This post will be update on the go due to exam period __ linux.com, a news side about linux and open source brought to us by linuxfoundation, has released its list for _The Best Linux Distros for 2017. Which places Elementary OS as the best linux desktop distribution.
However, surprisingly I disagree. The reason I disagree, is not that I am against Ubuntu3, which I do not like. The reason is that I think linux.com actually overlook a lot of distributions out there which are better suited for desktops. I will here present the three distributions which I see as the best desktop distributions and why, also I will argue why I see Fedora as overlooked.
OpenSUSE: This is a distribution which have had a lot of ups and downs, and I must I abandoned it, in its darkest days. But in the last couple of years, it has been given an infusion of new blood, which strive to make it a really, really good and have update the system and made it more stable, faster than I have ever seen before in a linux distribution. The system is extremely versatile and can be used for both enterprise and private usage, and for prior windows uses does the standard version come with KDE, so it is a very familiar experience. Which is actually the reason why I see it as overlooked, its turn around and familiarity.
Sabayon: This is a gentoo based distribution, which makes Gentoo approachable and it is extremely efficient, easy to use, and very resource light. Meaning that you as a user do not have to spend a lot of money on hardware. An advantage Sabayon has is that it provides almost all good desktop, Desktop Environment and Windows Managers. Additionally everything which working on Gentoo works on Sabayon ensuring continuous development.
Fedora: Fedora is a distribution which is heavily supported by Redhat and by such there is already offered a enterprise version of this distribution. But Fedora is close to bleeding edge and is update every 6 months, providing a stable and really awesome distribution.
So for a long time I have been trying out different ways to take notes for my books and writing character sheets. However no tool I have found actually does exactly what I want. The tools where either too complex or relied to heavily on muse interaction or the internet. The latter is a problem as I have a tendency to disable the internet when I write, to minimise the possible distractions during my process.
So what options do I have then. Well I have a text processing program such as Microsoft Word or LibreOffice Writer, or a note taking program such as OneNote. But and thing all these have in common is that they are uselessly heavy and have a strange workflow in my opinion. This is not saying that they are not excellent applications. So where should I then turn? Well Emacs of course it is my favourite editor and it can actually do a lot of the things I want, with a mode called Org or Organisation mode. But at the moment I do not have the time to learn a new mode (Christmas holly day is coming)… So what to do? Well it turns out that Org mode likes Markdown and so do I. Therefore I will start using it for my notes.
But why do I choose Markdown and not ReStructuredText (rst)? Well first of there is not a big difference and I just prefer the syntax of Markdown. However it is also to streamline the amount of formats I use and as I am already using Markdown for this blog, README files, university notes and so on. It just makes sense to go Markdown.
So now you know why, but what does this mean? It means that I will come with some blog post about how to use Markdown in Emacs, how to convert it pdf’s and latex and a few other things.
So as you might have noticed, the blog is in scrambles. There are a couple of reasons for this which I will cover in this blog post. I will also cover why I have not be blogging, but also what topic I will blog about in the near future and also a bit about what is going on in my life.
So let us get started
Scrambles and why
If you have followed this blog for a while you will noticed, that I have changed back to a more standard Jekyll theme (if you know Jekyll). This change was committed and worked as it should. However, I wrongly executed a commit all script in the blog root and by such a lot of draft post was published which I was working on. Therefore the blog is currently in scrambles, and it will take me a bit of time to edit and sort out the problems.
Why I have not been blogging and what to come
When I started at my Masters degree back in September, at lot of things change. Firstly the project group which I have been a part of for the past two and half years, split into atoms and I had to find a new group. Luckily I found that during the summer break, but it still have taken some adjustments and by such I have spend a lot of time on that.
Secondly, due to a (sorry Professor) hopeless course and style of lecturing, I have had to study an entire course based only on literature, instead of lectures and literature. Which is a completely new concept to me and it has consumed a lot of time.
Finally, due to different aspirations I have had during the summer break and start of the semester. I have been completed stressed out, all at my own account and fault. However, it have had me lash out at friends and comrades, resulting in me having to patch up a lot of things.
Those three factors have done such that I have been completely drained of energy and times. Hopefully I will become better at controlling myself and spend time on project I 100 percent care for and find less stressful.
What is going on with my life
I am still attending Aalborg University, just as a master student instead of a bachelor. I have also both chosen a topic and found a project for my 9th semester project and master thesis. Which I will begin in about a year. However, at the moment I am not at liberty to name the subject of either project nor thesis. I will state that it is about performance benchmarking and parallel programming. I have also found a supervisor to each project, again not at liberty to say who (yet). I will though state that the both will be done in collaboration with a company (guess which) and I might need a co-supervisor from another department at the university.
Topics to come
Here I will write a few topics I am going to write blog post about in the coming months
- Going Markdown
- Functional programming, why its a curse and a blessing
- Emacs, a welcome home
- Archetypes - A “class” of characters in my books universe
- The war and the fall that followed - Prelude to my book (a very shorted version of the back storry)
- Why I continue with Mac
- Goodbye Manjaro, hello again Fedora
- MacBrew - A new open source project
- irisPause - The saga continues
- More book stuff
I have developed software libraries for some years now and part of that have been learning to designing API’s for idiots. What I mean with that is; People with gladly use a software library without reading the full documentation for it, and then when do something which the API was never intend for. They complain that it is not acting as it is supposed to. One of the things I have experienced are people whom either expect and object to change or not change if it is parsed to a function or procedure. Therefore if either happens, they think the library is broken and needs to be fixed. This often happens when a user have not read the documentation for a function they are using. I found that a way to actually avoid this is by applying a restriction on the input given to a function. This is the restriction of saying this will not change or this is constant. Effectively making a object immutable, for a given function or and entire application.
So what does this mean? Well before we get started let me explain the concept of constant. I will base
this in C++ but it can be applied in C#, Java and such, but it might need the application of other keywords.
For instance in C# it is
readonly. Now back to C++, in C++ we have two usages of constant I will explain
but both using the keyword ‘const’. One is the application of making a variable immutable by applying the
when we declare the variable.
const int x = 10;
Let us break down, we have a integer x, x is 10 and it is constant 10. What this means is that x will ALWAYS be 10 and it cannot be changed. Therefore if yourself or another developer uses x, you can always be certain that it is
- This is very neat as there will be no confusion, when testing and function and its results. It also ensures that there are no discussion when you have to determine the value of variable.
The second usage of ´const´ is function based immutability. Just to emphasis I will show a function signature;
float avg(const int data, const int size);
What we have is the function signature for method calculating the average of integer values in an array. As you can see, I have applied the ‘const’ keyword to both data and size. This is to tell the user of the function that in the function ´avg´ we will never change either data nor size. Emphasising to the user that if he/she uses this function, the content of data and size will not change and are in good hands.
There is a third option of using
const in C++, but I have never actively used it myself, but it is used to
explicitly tell that a function cannot change member variables of a class and are only applicable when doing object
subscribe via RSS