New spring Admission 2013-2014 in Telerik Software Academy

Telerik Academy will accept 500 new students in the spring

This month 500 new students will start its free training for software engineers in Telerik Software Academy. You can apply till 7 April on the website of the academy.


The courses will begin at 25 April 2013 and will combine online and participatory form of training. They will include video lectures in YouTube and exercises at the Telerik Academy once per week. After February 2014 lectures will become only participatory.

The new edition is specifically targeted at employees and those of you who have never engaged in software development. It allows you to enter the world of programming


gradually and over a longer period of time by learning the basic concepts within 7 consecutive months. The new admission in Telerik Software Academy gives you the opportunity to determine when and how long to spend on preparation and follow our video tutorials from home. To strengthen your knowledge you can participate in the exercises, organized in the Academy each week.

What is the different in The New Admission

  • You have 7 months more to learn the basics of the programming
  • You can watch the video lectures anytime you want
  • You can participate in practical exercises and discussions once per week
  • You can easily match work and lectures
  • You can prepare with your own pace

Who can participate?

Everyone with:

  • Strong motivation for professional development as a software engineer
  • Striving for long-term development and dedication to work
  • Technical English and excellent command of Bulgarian
  • Computer literacy
  • There are no age restrictions. The presence of education in the field or prior experience is a plus but not mandatory.

How to apply?


You can read more information here.

I would like to see your comments.

Best regards,



My path to the profession “software engineer”


Math has always been my passion. My first usage of a computer was connected with Star Craft. This suddenly turned my math passion into a passion for strategies. I start to create my own games, to find formulas and rules, by which to functionate. Of course, all of them were on paper. At that moment the computer was only a luxury toy for me.

I realized for the first time, that the computer has other functions, when we started studying Pascal at High School. Unfortunately IT lectures are widely ignored at the expense of other subjects in school.


After I graduated, I was adopted in University of national and world economy, Sofia Business Administration. This was my first wish. There I met business modeling and business games.The first year I took a part for the first time in such game and this became my new passion. In the third year of my education I studied International Business in University of Applied Sciences Pforzheim, Germany, where I took part in the same kind of games for a second time. So in the fourth year I decided to create my own. The model was very “ugly”. In fact it had more bugs than working parts. Nevertheless, the game took place and the participants were my classmates.

I graduated bachelor and applied for a master Management of international projects at University of national and world economy, Sofia. Thus I visited a lecture about MATLAB. With the help of YouTube and different guidelines I wrote my master theses “Cost engineering and variance of the graphics in the management of international projects using Monte Carlo simulations”, based on a MATLAB model. I also rewrote the business game and turn it into a working one. But to popularize it I had needed skills which I didn’t have.

I worked in Bar Harbor, Maine, USA – in Work and Travel Program, in Junior Achievement Bulgaria as a trainee (the reason to wrote a business game), in an investment intermediary, in Ministry of education, youth and science, where I was part of a team responsible for the management of EEA Grants in Bulgaria. Last I worked in administration department of a company.


I heard about  Telerik Academy from my sister, who is studying in Technical University, Sofia and I understood that this is the way to finish what I was started.

My professional development


My motivation to become software engineer is connected with my aim always to do new things, to get new skills and to communicate with new people. In the base of all is my curiosity and my passion for maths and modeling.

Another reason to get inspired at programming is Telerik Academy are the tasks with asterisks, which in every one moment pushed you to the end of your abilities and fill you with positive emotions after their solution.

This is the reason to be sure that I can be a good software engineer and that I want to commit and develop in this profession.

For me it is important to be a professional

I have always been the best in the group. This always satisfied me and I have always been aspired by it. I always want to be the best. That’s why I am perfectionist. This is the reason to want to be a professional in what I do.

To be a true professional it is needed not just to do some things, but to do perfect things.

Regard to software technologies this mean to be aware with the innovations in this sphere, which happens every day. To know how different programs, technologies, OS, programming languages and platforms, websites and hardware works.

You can do this with constantly reading of articles, blogs, watching videos, taking part of different seminars and courses, writing programs. This makes you professional and brings you recognition and respect, which give you satisfaction of well finished work.

Everyone who wants to be professional should be responsible, to keep his promises and to fulfill his commitments.

For me it is a pleasure to work in a team and to help others

During my study at the university I had the possibility to take a part in different teams for different tasks and projects, and in Germany I took part in teams, where I was the only Bulgarian.I enjoyed these projects  the most and they turned out to be the most useful for me. The main reason for this is the autodidact or learning from your colleges, because each human is unique and has different information. Thus the teamwork allows achieving results, unattainable for none of its members alone.


Creation of quality software product is impossible without teamwork. This is one more stimulus for me which makes my wish to be a software engineer. Because I know that even if I am standing in front of a difficulty, there will be someone who can help me and who is not going to reject me. But also that I will have the possibility to help my colleagues, and there is no more satisfying than to help somebody.


Based on the exposed above reasons, I am highly motivated to do programming, to become and to develop as a software engineer.

I will put all my effort to be a good professional, to learn, work and develop every day. I will work qualitatively and use all my knowledge and skills, which I have in this direction.

The most important for every software engineer is to learn how to work in a team, to share and to help his colleges, to publish interesting and important things, which he met in the internet and work, and I will put all my effort doing it.

Download the full essay in english.

Download the full essay in bulgarian.

I would like to see your comments.

Best regards,


Bit Rotation

A bit is the basic information unit in computer technologies. It can have only two values – 1 or 0 (true or false). To read, process and store information computers are using only these two values, by converting all kinds of data to binary. Therefore the operations with the binary representation of the data are much faster. These operations are called bitwise.


Bit Rotation is a program which exchange random number of bits in a binary representation of a symbol (number, letter or other sign).


The program is divided to three parts – read the input, rotate the bits and print the result. They are separated in the methods – RotateBits() and PrintResult().

The program works with four input variables – entered symbol, first and second beginning positions and range. It exchanges the bits of binary representation of the symbol in the intervals –  [first beginning position, first beginning position + range) and       [second beginning position, second beginning position + range).

Input constrains

  • 0 <= first beginning position < 31 (for symbols < 15)
  • 0 < second beginning position <= 31 (for symbols <= 15)
  • 0 <= range <= 16 (for symbols <= 8)
  • first beginning position + range + range <= 31 (for symbols <= 15)
  • second beginning position + range <= 31 (for symbols <= 15)


After the input is read, we convert the entered symbol to integer number.

The program groups corresponding bits in couples (which are equal to the range). We find the values of the bits in every couple and assign every bit with the value of its couple mate. To achieve this we use the bitwise operators – & (and),   | (or),   ~ (not),   << and >> (left and right shift).


Building blocks of the program are two methods – SetBitToOne() and SetBitToZero(). As arguments they take the position of the bit, which is going to be changed, and the integer number, which bit is going to be changed. They perform basic algorithms for changing given bit to one or zero.


At the end according to the input the program prints the result – the new created symbol (number, letter or sign).


See the project here.

I would like to see your comments.

Best regards,


Why Binary Search or Why not ?

There is no generally accepted formal definition of “algorithm”. It could be explained as “a set of rules that precisely defines a sequence of operations”. It is an effective method for calculating a function, data processing and automated reasoning.

Therefore they are widely used in computer programming. In fact the definition of computer programming is much the same – “creating a sequence of instructions to enable the computer to do something”.

To program you should use algorithms.


Almost every one computer program is searching for a particular data in a collection. To do this you can use different algorithms like linear or binary search to find an element in a collection.

Linear search

Linear search is an algorithm for finding a particular element (for example a digit, number, letter or word) in a collection (for example a number, an array of numbers, a word or an array of words).

To do so by using linear search we consecutively check the elements in the collection from first to the wanted (or the last if there is no such element in the collection).


The advantage of this method is that it is not required the elements in the collection to be sorted. This algorithm is also very easy to implement.

Other significant characteristic is the speed or number of iterations to complete the task. To estimate the speed we are going to define the best, the worst and the average case. 


The best case is when the wanted element is the first element in the collection. In this case the time we need is a constant (always one iteration).
The worst case is when the wanted element is the last element in the collection or there is no such element (n iterations). In this case the time we need is proportional to the number of elements in the collection (linear time). This means that by increasing the number of elements in the collection the time we need is increasing in the same way (linearly).

In average we will need to do n/2 iterations.

Binary search


We can find a particular element in a collection by using binary search if the collection is sorted. To do so we consecutively check the middle elements in the collection and compare it to the wanted. Now we know in which part of the collection is it and we don’t need to check the other one. So we resize the collection, find the middle element, compare it to the wanted one and so on till we have only one element left (if it isn’t the wanted so there is no such element in the collection).

The disadvantage of this method is that it is required the elements in the collection to be sorted. This algorithm is more difficult to implement.

The advantage of binary search algorithm is the speed or number of iterations to complete the task. It is much faster than the linear search.


The best case again is when the wanted element is the first element we check (in binary search – the middle one) and the worst case is when there is no such element in the collection.

The reason about this is that the time we need is proportional to the logarithm of number of elements in the collection (logarithmic time). This means that by increasing the number of elements in the collection the time we need is increasing logarithmically (log2 (n + 1) iteration).

We will always need to do log2 (n + 1) iterations if log2 (n + 1) is an integer and log2 (n + 1) rounded down or up if it is not.


See the project here.

I would like to see your comments.

Best regards,


My First C# Exam

In this article I will present and comment my real task decisions and my mistakes at the exam in Telerik Software Academy (at 29.12.2012 – BGCoder). There are also my decisions for all tasks from the other two exams (500/500).


The first task I solve was Triple Rotation of Digits –         To solve this task I used the next property of the integer numbers – if we have an integer number XXXY, where X and Y are digits, hence XXXY % 10 = Y and XXXY / 10 = XXX.

Now the last digit can be easily moved at the beginning by concatenation – YXXX. But there is a pitfall. If we have one digit number (for example 3) XXX is going to be 0, and YXXX – 30 instead of 3. Therefore we need to check is XXX equal to zero. If Y is zero we need only to parse the received string YXXX to integer to lose it.


The second task I solve was Quadronacci Rectangle – To solve this task I used arrays and matrixes. First I created a matrix with the same rows and columns as the rectangle and found the number of members which is the product of rows and columns. Then I calculated consecutively the values of members of the sequence and stored them in the matrix (from fifth member).

I also considered the cases if the number of members of the sequence is one, two or three. These cases are not in the range of this variable according to the task description (it could be found as a mistake).


After I read the description of the third task Poker, I understood that this task was a tough one (in fact it was the most difficult task for me). So I decided to move to the next one UK Flag –                                                                                     To solve this task I divided the picture on three parts to draw it – over the middle line, middle line and under the middle line. The tricky thing is that to draw – \, you should use escaping sequence.


I still had four and a half hours and started thinking over the third task Poker –                                                                                             To solve this task I used switch statements. First I used TryParse() method to check is the input a number. If it was I stored its value in an array, if it not – I converted it to an integer number by switch statement and stored the value in the array.

Then I found the number of different cards in the input and stored their values in the first row of a matrix and how many time every one of them is repeated in the second.

Last I used again switch statement to find the combination. There are five cases – if we have one, two, three, four or five different cards.

If there is one different card so we have five identical cards. If we have two different cards – there are two possibilities: 4 + 1 or 3 + 2. If we have three different cards – there are also two possibilities: 3 + 1 + 1 or 2 + 2 + 1. If we have four different cards – there is only one possibility 2 + 1 + 1 + 1.

If we have five different cards they can be consecutive or not. To find it I created another array where to store the values in increasing order. I found the min positive value, restored the actual value and assigned it in the new created array. After that I deducted the input with the current min value.

My first submitted solution had more wrong answers than correct. So I started debugging. After two and a half hours, several submitted solutions and found mistakes I reached 88/100 and still had one task to solve.

So I decided to start with the fifth task Angry Bits –          To solve this task I used nested for loops. First I store the input in an array, initialized three integer variables to calculate the number of dead pigs, the length of the path and the points, and a boolean variable to check is in the cell a pig or not.

With the first and second for loops I found the value of all bits between positions 8 and 15 of all numbers. If its value is one – it’s a bird.

Now we should look for a pig. Therefore are the third and the fourth for loops – third is searching in the direction up and right (deduct each time the values of current row and current column with one till one of them become zero) and the fourth in the direction down and right (increase the current row and deduct the current column till row is lower than seven and column is bigger than zero). If there is no pig the length of the path is increased and the value of the next bit is calculated. If it is one – it’s a pig.

With the fifth and sixth for loops I checked the value of every bit around the found pig. If it is one I increased the value of dead pigs and changed it to zero.

After third and fourth for loops I changed the value of found bird to zero and calculated the points.

Last I calculated the sum of all numbers. If it is a zero the player wins, if it’s not – he doesn’t.

The important is to be careful for the edges of the playground and to not go out of them.


After that I returned again to the third task Poker. I tried some combinations, but I couldn’t found the error – it seemed that the program was working correct (but it wasn’t).

After the exam I found the error and it was very stupid (of course). The mistake is in case 3. First I check if one of the cards is repeated three times. If it is so we have Three of a Kind (correct).

Then I check if one of the cards is repeated only one time. If it is we have Two Pairs (incorrect), because we always have a card which is repeated only one time.

So I should use if – else construction instead of two if conditions.

Another mistake is that at the end of exam instead of checking consecutively all of the cases I checked them randomly.

I set the cards in increasing order by using nested loops, when it can be done with one method – Array.Sort() (it could be found as a mistake).


These are my solution to the tasks from first and second exam.

NextDate   TribonacciTriangle   Sheets   Carpets   FormulaBit

Sevenland   Anacci   ExcelColumn   Logo   BitBall

I would like to see your comments.

Best regards,