Monday, 23 February 2015

Programming language choice:my 2 cents

One day I was having an argument about programming languages.Now as a learner and as somebody who has ventured trough 3 different IT universities succesfully this is what I have to say.
Anyhow,here is my qoute from that argument:
You should first learn the language for which you have the most talent.Whatever language feels the most natural to you.If it is for instance some obscure lisp dialect then by all means go learn lisp.If it is python,go learn it.Is it lolcode,qml,brainfuck,assembly or some language which is so hipster that nobody has ever heard about it?Go ahead.
The tragedy is that the industry and programming courses are not made to be language agnostic,so you are force fed to learn the languages they pick for you.

The plusses of my approach would be many,but just to point a few:
a)programmers that are happier about their life
b)better programmers
b.1)more programmers

c)better API support for a wider range of languages in the long run.


The modern model where the industry forces the popularity of programming languages has some drawbacks.Another problem is in the fact on how programming courses are organised.

I think that most of us will agree that the choice of your first programming language is very important and that at least sometimes people can get discouraged from programming if their first programming language is not suited for them.

Ideally both the industry and the courses should be language agnostic.Now you might think it is impossible but no it is not...The basic principles of programming are identical in 99% of programming languages.The only differences are in the implementation.


It just requires some manpower from the education facility.In fact in my last course of programming on my undergraduate college I was attending a language agnostic programming course.And honestly I feel that course was the one where I learnt the most.I even caught up some stuff I failed to learn at earlier courses. (Like inheritance and anything related to OOP that is above simply instancing an object with getters,setters and constructors).

In the first week of the course students were required to pick one of 3 programming languages.C++,C# or Java.I picked Java which was that year the least popular choice.And I did not regret it.But before I continue I have to give thanks to my teachers prof. Goran Salamunićcar and his assistant Aleksandar Radovan,and the two other assistants who I did not have who implemented the course in such a beautiful and almost language agnostic way.

The course was split into  parts:Theory,laboratory work and a seminar.The theory was mostly done by the professor,the laboratories were handled by the assistants.

The theoretical part always was 2 weeks in advance compared to the laboratories,so that the students could use the theory as a source for their homework.Each week the theoretical presentation lasted for averagely 1 hour and 45 minutes.1 hour of that time was spent on the theoretical background of programming.15 minutes were spent on each language to explain how it was implemented.There were 2 mid term exams that had 2 theoretical questions,2 questions where you had to write code snippets and 2 mixed questions where you had to do both.If you passed the midterms you freed yourself from the theoretical part of the exam.

The laboratories included homework and there was a point system.The assistants had a lot of freedom on how to execute the laboratories.However this is how it was done with Java:
Homework was given one week in advance.But doing the homework was rewarding because the actual laboratories were rehashes of the homework with just minor changes to the code.And as such students who had finished the homework themselves were rewarded with more points.There was also an entrance quiz which consisted mostly of things from the homework and an exit quiz,each of the quizzes was worth 3 points.The actual laboratory was worth 3 points + 1 extra point for students who had done anextra task which was not a part of the homework and was decided by the assistant on the spot.At the end of the lab the assistant would give the students the code from the lab if they requested it by email.

The seminar brought the most points for the course.Basically the students would have to decide on a seminar topic and make a fully functional app.Each app has to cover at least 4 topics from the laboratories.Also the student has to make a documentation of the app and defend the seminar with his assistant.Once that is done,if the student has enough points in all areas of the course all he has to do is to take an oral exam with the professor and then bingo he has passed the course.


But you could say that the course I mentioned earlier is still not completely agnostic because you still only have a choice of 3 languages.Well this is how I would solve it:

More seminars/apps
And yes I agree this path would be very tough for the student.

Basically students would be presented with this option.If their wished language is too obscure to be included,the student should do 4-5 seminars/apps.Each one of those should be tied to several areas of theory and laboratory practice that the other students take part in.The student would still have the support of the professor who would be qualified to teach him all of the theory.The student would still have all the resources of his educational institution.And perhaps the professor could link the students to other assistants and professors who are not part of the course but happen to know the students desired programming language.Also the student would still have at least a very loose educational direction.

The evaluation of the seminar would then replace the laboratories.Since the students were freed from laboratories it is assumed they had enough time for the seminars.Once again I repeat,choosing this path might not be easy for a student,but I firmly believe this would improve the output of decent programmers from educational institutions.Also this would allow the institutions to measure the popularity of programming languages so they could tweak the course even further.

The end.

Wednesday, 18 February 2015

The 12 types of programmers

So a while ago I was thinking about what kind of personalities do computer programmers have.While I am not a psychologist these are some of the ideas I came up with.Honestly I do not consider myself a good programmer,but I very much like to occasionally do a project and take part in the culture.Also when deciding which one are you,remember this is for fun and you can have multiple choices,and put your responses in the comments.I consider my self a "code generating zombie sysadmin wannabe". :P

The genius

Pretty self explanatory.This person is the best or one of the best developers in your surrounding.
Type a:
You are going to hope he is the type a.I would simply say that type a is the type that does not expect others to be on par with his performance.He is usually a very calm and understanding person.His code and output are both great.
Type b:
Type b is the type that does not recognize that he just has a lot more talent than the others and pretty much expects everyone else to be a genius as well.Because of that he can and will make the office atmosphere poisonous on occasions.If you are his superior manager and he does not like you he WILL try to destroy your authority.

His good points:
He is the best programmer in the house.Generally doesn't have output problems.

His bad points:
He can get arrogant.Don't get on his bad side.

His best friends:Potentially everyone.
His worst enemies:Potentially everyone.

The code monkey

 This is the programmer that has no problems with deadlines.However the quality of his code is subpar.He also has problems with developing program logic which is why it is best to have him in a team with other developers.

His good points:
He generally reaches deadlines.He has a high code output.

His bad points:
He is unable to create complex program logic.

His best friends:
The would be sysadmin and the code generator
His worst enemies:
The genius,the self taught

The academic

This is the person who has a diploma and is not afraid to show it.He has this aura of a university professor.A very calm person indeed.He knows everything there is to know about programming theory and as such is a valued member to an otherwise mixed team.And he is a fan of bleeding edge science.The fact that he is a thinker by nature means he will always be a source of fresh project ideas and innovative solutions.However some people will not like his attitude.And also if he thinks the project is just a rehash of something that was already created many times he will lose all interest for the project.

His good points:Knows theory,source of interesting ideas,a thinker by nature

His bad points:may be disliked by some people,ADHD,uninterested for boring projects

His best friends:the genius,the uber geek
His worst enemies:the go home guy,the self taught

The would be sysadmin

This guy actually prefers an administration job.It does not have to be system can be any type of computer administration.However somehow he ended up as a developer.And usually this shows on his performance.And he never forgets to complain about that.However as such he probably know a lot about scripting.And although he is not a full fledged admin he probably does know how to solve some office problems when the real admin is not there.

His good points:good at scripting,his admin knowledge might be handy

His bad points:complains a lot,subpar code

His best friends:anyone who listens to his complaints
His worst enemies:anyone who does not

The uber geek

This guy is a geek like everyone else in the office.However this guy knows he is one and he is always proud to show everyone else how much of a geek he is.He is the geek among geeks.He is always informed about the latest changes in the tech industry. And he knows everything there is to know about ggeek culture.However some people will dislike his attitude. And he will often dislike their non-geek attitude.

His good points:he is very informed about the industry,he can lift up the spirits of other geeks

His bad points:he does not mix well with non-geeks which can be a source of conflict

His best friends:the academic
His worst enemy:the go home guy,the healthy guy

The code generator

This is the person that always relies on generated code.In fact some of his projects are up to 99% generated code/code from libraries. He is constantly bragging about his new IDE with a never ending list of features.As a result of his coding practices he rarely misses a deadline,however his code quality varies and usually is not very optimised.And the small bits of code he must code by himself almost always result in headaches.

His good points:reaches deadlines,knows the best tools

His bad points:unoptimised code,those small bits of code he does himself.

His best friends:The code monkey
His worst enemy:the vi user

The vi user

This guy is the polar oppoiste of the code generator.Vi was used just as an example.However this guy loves the most minimalistic text editors.This guy simply loves to hand code every little piece of his code.In extreme cases he even avoids libraries from other people.However the quality of his code is often top notch.Yet somehow his attitude is sometimes arrogant.Often due to his programming practices he has problems with deadlines.

His good sides:He carefully controls every last bit of his code,which results in excellent programs,good at low level programming

His bad sides:He is developing at snail speed,has attitude problems.

His best friend:The genius
His worst enemy:The code generator

The zombie

He is the type of programmer that always programs during the night.And it really shows on him.He shows both signs of physical and mental exhaustion.However although he always complains how the deadlines are short he never has problems with reaching his deadline.Most of the time his code output is pretty high.Even though occasionally it has bugs.You wonder how does he have the deducation to simply not fall unconscious.

His good points:
Dedication,doesn't miss deadlines.

His bad points:
Bad concentration amplified by sleepiness causes bugs.

His best friends:Whoever brings the coffeine
His worst enemy: 7:00-15:00

The vampire

This being of the night loves programming during the night.His body might show some circles around the eyes and some weird tooth deformations however unlike the zombie it is almost like he does not even need sleep.He works trough the night,he reaches deadlines and its perfect.You honestly wonder how does he keep doing that?Does virgin blood now contain high amounts of coffeine?

His good sides:Reliable output,lively during the night

His bad sides:Creepy

His best friends:The night,virgin blo...oops I mean coffeine
His worst enemies:The sun,your jealousy

The I wanna go home guy

We all are sometimes stressed out and tired on our jobs and that is ok.However this guy takes this to a completely different level.If there is a work from home program at your office this person will almost certainly apply for it.And the geek culture if there is any in the office is just making him pissed off.He has no passion at all for his job.Because of those reasons his job performace suffers.However when the rest of the office starts geeking off he keeps a level head which is an advantage.

His good sides:keeps a level head

His bad sides:bad job performance

His best friends:The wannabe sysadmin
His worst enemy:The uber geek

The healthy one

Let's face it.The lifestyle of an average programmer is not healthy.However this guy is an exception.He is the type that is on a constant diet,goes regularly to a gim and does everything in a healthy way.Most people would not mind that if he did not constantly remind you of how unhealthy your lifestyle is.I mean most people who have an unhealthy lifestyle already know that,but this guy makes it his job to constantly remind everyone about that.

His good sides:His advice is actually good and you know it

His bad sides:He can make you feel bad about yourself

His best friends:The go home guy
His worst enemies:The uber geek,The zombie

The self taught
This is the guy who did not go to college.Instead all of his education was either done trough certifications or trough self learning.His advantage is that all of his knowledge was acquired trough practical exercises.And in some specialised areas he has very deep almost complete knowledge.However as soon as you step out of those areas  he has literal knowledge holes.I.e.You need to do a webapp with XML but all he knows is JSON and only JSON and he does not know even the asics of XML.Or you have to do a android application in Java,but all he knows is to do Java desktop applications and you are not even using his favourite API's.Or you have to develop a website with HTML5 and CSS3,however he still insists on using outdated technologies like Flash.Or he knows everything about programming,but he does not know all the basic parts of a PC.
His good sides:Deep practical knowledge

His disadvantages:Knowledge holes

His best friends:The genius
His worst enemy:The academic

Saturday, 7 February 2015

Good job to Ubuntu developers!

This here goes to all the Ubuntu Linux developers.

Your product is used all over the world.But that is all the result of your hard work.You have created a Linux distribution that just works.And your Linux distribution later spawned distributions like Linux Mint.Furthermore you have set the unofficial standard of quality for all "user friendliness" oriented Linux distributions.

However a lot of your work is also derived from the community.So I would also like to give thanks to a certain mr Richard M. Stallman for creating free software and to mr. Linus Torvalds,and special thanks to all the kernel developers and all the other community developers.You all have done laid the foundations of the operating system environment which now dominates the consumer electronic market which is commonly known as GNU/Linux.

I am inclined to write this in the wake of how much work has been invested into Ubuntu lately.Yesterday we have seen the introduction of the first Ubuntu mobile handset.As such I am sure this is a great milestone for this company.Another reason why I am writing this is because I have seen such rapid development on Unity8 on desktop.It is almost baffling how fast this has evolved from a tech demo to a almost feature complete product.And at the same time regular Ubuntu unity7 development was ongoing with so many other projects.And I am sure that tablets will come soon.

One of the areas that affeceted me the most was the Ubuntu sdk.As a IT college student who barely scraped trough most of his programming classes it was inspiring when I first read the tutorials on QML.I liked QML at first sight.Also the extensions added to base QT creator are great.And after failing to compile my apps into a .deb package for several days,when I first tried with .click it was like a small revolution.
You have enabled me,a subpar programmer to deploy my applications.And I can only promise to make better applications for both the future unity8 desktop and mobile handsets.I will try to make my first scope soon ;)

Here are just a few of my suggestions on what to do after you all get all your deserved bonuses,holidays and when Unity8 is finally complete:
Augmented reality,voice control and further expansion of the SDK and API.
Augmented reality is really something that has "wowed" me and the industry ever since Google Glass was introduced.You could for instance try to examine if there is any way you could include ARToolkit with your SDK or something like that.Furthermore AR seems a bit like a mobile oriented technology.
Voice control because the other 3 mobile platforms all have it.Just having one would be enough,because it seems like some kind of unwritten standard right now.The problem is there is no decent voice control on Linux in general.
And you should expand the Ubuntu API and SDK so that you are able to attract more application developers.

Also I hope you continue to have a great relationship with the community,so that the community will always give back to you.And that together we help to make a better Ubutnu experience a reality!