На въпроса “Какво знаете за Телерик?” получихме следните забавни отговори:
Телерик е един от най-успешните отдели на Microsoft Corp.
Телерик е водеща outsourcing компания.
Знам за Телерик от фланелката на един колега, който лятото се разхождаше стяхна тениска.
Телерик е българска телекомуникационна компания.
Телерик е най-голямата софтуерна фирма в Европа.
Телерик пише софтуер за микроконтролери.
Телерик е фирма за обучения, наскоро купила НАРС.
Телерик е ИТ фирма, която пише софтуер на Java и C++.
На въпроса “Какви книги и статии за програмиране сте чели наскоро?” се смяхме обилно на следните твърдения:
Чел съм учебника на Наков за JavaScript.
Чел съм книгата на Наков за C.
Чел съм за програмиране на микроконтролери, за да се подготвя за изпита.
Чета блогове за софтуеърни инжинери.
На въпроса “Как се виждате след 2 години?” имаше също забавни отговори:
Ще стана team leader и ще управлявам новите продукти на Телерик.
Ще си стоя в стаята и ще си гледам монитора с празен поглед, както другите колеги в офиса.
Ще науча Java и ще се сертифицирам, за да докажа, че ставам за програмист.
Ще поработя 1-2 години и отивам да карам магистратура в Германия.
На въпроса “Колко часа на ден ще отделяте за работа?” някои бяха написали много интересни отговори, които ни накараха да се засмеем дружно:
Програмирането е емоция, страст, изкуство, посвещение и стил на живот и не се мери в часове.
Ще работя non-стоп, стига да има кафе и сандвичи.
Ще работя overtime, както всички във фирмата.
Ще отделя за работа цялото си свободно време, но понеже съм студент, това е на практика по 1-2 часа в работните дни.
Ако се чудите како трябва да отговорите на тези въпроси, трябва да знаете, че отговорите са индивидуални и няма “рецепта”, но със сигурност, когато кандатствате за работа, трябва да знаете къде кандидатствате, с какво се занимава фирмата и т.н. Ако кандидатствате за работа, е нормално тя да е важна за вас и да й отделите достатъчно време, най-малко колкото се изисква в обявата. Ако ментосвате, правете го убедително, примерно не казвайте, че сте чели книга за JavaScript и HTML от Наков, защото той не е писал никога такава.
Today the reputable survey of Aon Hewitt (the #1 human capital consulting company in the world) has shown that Telerik Corp. is the best employer for Bulgaria for 2010 in the category “Small and middle enterprises”. It is the leader not only in the IT sector but globally, in all industries. I am proud to be one the happy employees of Telerik and I truly believe that Telerik is really excellent place to work. Enjoy the results (source: DarikNews):
It is not a secret that Telerik is constantly growing, but with great people only. It has employed a hundred new software engineering professionals in 2010 and more than 20% of them come from Telerik Academy project – the best place to learn software development in Bulgaria for free: http://academy.telerik.com.
I feel a strong contributor to the success of Telerik and I am happy to be one to the organizers of Telerik Academy (academy.telerik.com) and Telerik School Academy (schoolacademy.telerik.com). I am happy that Telerik highly supports these initiatives and helps the Bulgarian IT industry to grow.
I am very happy about the recently published ranking system for the Bulgarian universities. This is great idea and it is nice to have it in Bulgaria. Modern countries have similar ranking system for decades. For example:
It is important that in the United States in one of the top universities, Harvard, the acceptance rate for new students is about 7%. This means that 93% of the candidates get rejected during their entrance assessment. I will be happy to see something like 40-50% for the top Bulgarian universities, but this is far away from the case. Now most of the candidates applied for the Bulgarian top university “Sofia University St. Kliment Ohridski” are accepted in their first or second choice of specialty.
The Ranking System for the Bulgarian Universities
Now let’s discuss the official Bulgarian University Ranking System:
The site holds very rich information and visitors can easily compare universities targeting some specialty of interest and see the rankings. The evaluation criteria are too much and thus this gives a way to distort the ranking just by changing few key parameters.
Now let’s examine the computer science and software engineering related specialties. In the ranking system we have only three computer-related specialties:
Communication and Computer Technology (hardware)
Electrical, Electronics and Automation (hardware)
Informatics and Computer Science (software)
Ranking for the Bulgarian Universities for Computer Science
Since I am interested primary in software engineering and software technology related specialties, I made the most standard query for the specialty “Informatics and Computer Science”. The results are the following (as of 8 November 2010 ):
#
University
City
Degree
Score
1.
Sofia
Bachelor, Master
69
2.
Blagoevgrad
Bachelor
62
3.
Sofia
Bachelor, Master
53
4.
Plovdiv
Bachelor, Master
52
5.
Blagoevgrad
Bachelor, Master
50
6.
Varna
Bachelor, Master
47
7.
Veliko Tarnovo
Bachelor, Master
46
8.
Burgas
Bachelor, Master
45
9.
Varna
Bachelor, Master
44
10.
Rousse
Bachelor, Master
43
The leadership of Sofia University “St. Kliment Ohridski” and its faculty of Mathematics and Informatics (SU-FMI) is clear and there is no doubt that Sofia University is the best Bulgarian university for software engineering and computer science higher education. This does not mean that SU-FMI is outstanding, it just states that SU-FMI is the leader and it is better than the others.
TU-Sofia is not in the Top 10 Bulgarian Universities for Computer Science and Software Engineering
The interesting fact is that the Technical University of Sofia (TU-Sofia) in not in the top 10 of the ranking. This asks the logical question: if you want to become a software engineer, shall you study at TU-Sofia? I could fully confirm that TU-Sofia is not the best choice. My experience shows that even the Burgas Free University and Rousse University have better software engineering and software technologies training than TU-Sofia. This does not mean that TU-Sofia is not a leader in different areas like computer hardware. In this article I am focused only in computer science, software engineering and software development technologies and it is clear that TU-Sofia could not get in top 5 for these specialties (in November 2010).
Once in 2008 I was an advisor of a student defending his master’s thesis in software technologies in TU-Sofia and I was amazed that at the defense students brought paper posters because there was no multimedia projector (or they didn’t know how to use it). Students defending a development of software systems did not demonstrate them, just talked in front of piece of paper. This is another nice story to support the “superior” level of TU-Sofia in training software engineering, computer science and software technologies and IT specialists as general.
My Ranking for Software Engineering Universities
My ranking is slightly different by the official ranking of the Bulgarian Ministry of Education published above. About the American University in Blagoevgrad (AUBG), I don’t think the computer science training there is better than in New Bulgarian University. In AUBG students have iron discipline (American style) and this makes them more successful after graduation (which is important indicator for the ranking system of the Ministry), but the New Bulgarian University (NBU) seems to have better technical training, more focused in practical software engineering and cutting edge software technologies (e.g. Java, .NET, mobile development, etc.).
My ranking about computer science and software engineering Universities in Bulgaria is as follows:
Sofia University “St. Kliment Ohridski”, Faculty of Mathematics and Informatics (SU-FMI)
New Bulgarian University in Sofia (NBU)
American University in Blagoevgrad (AUBG)
Plovdiv University, Faculty of Mathematics and Informatics (PU)
I also think that TU-Sofia is out of this ranking and if you want to become a software engineer and you want to be professional computer programmer, TU-Sofia is not the best choice for you!
A good confirmation is that when students organize training courses like the recently stopped Java EE development and ASP.NET, the university authorities do their best to stop and destroy them.
Yes, there are many software engineers graduated or studying at TU-Sofia, but this is due to the fact, that TU-Sofia is the largest university in Bulgaria. The software engineering training in TU-Sofia is not competing with the better universities (like SU-FMI, NBU and AUBG) but the students in TU-Sofia are so much that some of them howsoever become software engineers when they start working in the industry despite of the university education. TU-Sofia produces many times more graduates in computer science related specialties than any the other university in Bulgaria but in the software industry still Sofia University graduates are dominant. Again, to be specific, I talk about the software development companies like SAP, VMWare, Telerik, Musala Soft, OBS, etc. not about the system integrators and other IT companies (like HP for example).
Disclaimer
Please consider the above opinion and my ranking as my own contribution and I do not necessary bind this general feeling with the companies and organizations I am affiliated to (BASD, Telerik, FMI @ Sofia University, CITA, and few others).
Clarification
I would like to thank to colleagues from the Technical University of Sofia who sent me a well-founded explanation why TU-Sofia is not in the ranking for computer science and software engineering. This is due to the fact that TU-Sofia does not participate in the category “Informatics and Computer Science”. It just do no train students in this educational / scientific direction. In the same time TU-Sofia is leader in the category “Communication and Computer Technology” in which Sofia University (SU-FMI) do not participate. Thus someone applying the same reasoning to compare these two universities could conclude that SU-FMI is not the best choice if you want to be trained in communications or computer hardware, and this is clearly true.
We could conclude that TU-Sofia is not the best choice for computer scientists / software engineers and SU-FMI is not the best choice for hardware engineers and communications engineers. This strongly correlates with the main idea of my article, which is clearly stated:
TU-Sofia is not the best place in Bulgaria for studying practical software engineering and computer science
TU-Sofia is strong in computer hardware, communications and other hardware-related specialties.
We cannot directly compare TU-Sofia and SU-FMI in their competences in training informatics, computer science, software engineering and software technologies because TU-Sofia focuses primary on producing hardware engineers and SU-FMI focuses primary on producing computer scientists and software engineers. I do not compare the quality of the provided education by both TU-Sofia and SU-FMI, just their primary focus, and I still believe that TU-Sofia is not the best choice if you want to become a skillful software engineer.
Recently I am involved again in recruiting a large number of people in the field of software development and every day I receive a number of amazing and frustrating job applications that let me fall down in unbreakable infectious laughter. Thanks to all these applicants. They make my work day full of joy and laughter.
The Worst Way to Apply for a Job – Example
I will start by a great example of how we * should not * apply for a job. Once we posted a job position and we requested from all applicants a CV in English and cover letter in English. Few hours later we received an application letter like the following:
From: “asd sgfds” <the_killer_machine@gmail.com>
Subject: (no subject)
Message body: (empty)
Attachments: New Document (2).htm
The attachment contains an “excellent” CV of 5 lines in Bulgarian with tens of spelling mistakes and bad formatting.
Mistake 1: Not Reading the Job Application Requirements
Thrust me, when a company requests a certain set of documents from all applicants, if you want to successfully apply for the job position, you should send all of these documents, not just some of them. If you are running a company, you will need employees that do what you have requested from them, not just some piece of it and in a wrong way, right? The same applies for the employer posted the job offer. Employers need employees who do their job as expected and bring great results to the company.
In our case we requested CV in English and cover letter in English. This means exactly what these two phrases say: we request two documents, CV and cover letter, both in English. This does not mean a cover letter in Bulgarian or CV in Bulgarian or absence of some of these documents. This means two separate files containing exactly what the company requested.
To be successful when applying for a job, ensure you have read carefully the requirements and you understand them. Send exactly what is requested. For example if they request “intention letter”, send them intention letter, not cover letter. If they request “motivation letter”, send them motivation letter. If they request “resume”, send them resume, not CV. If they request diploma, send them your diploma. If they request references, send them references. If you don’t have, try to find some. If the employer asks you to send job reference number, send it. Just follow the rules of the employer, not your rules.
Trust me, it is better to send 2-3 high-quality and carefully prepared job applications to 2-3 of the best employers instead of sending 20-30 low-quality job applications to all currently active job offers (by low-quality job application I mean just sending a CV in an email without subject and body). Chaotic job applications almost never work and it is always better to send high-quality applications.
If an employer sees that you do not know in what company you apply and for what position you apply, your application will be directly discarded and in most cases you will even not receive a notification. Here I mean the serious employers that need high-quality employees. The others should not be interesting for the normal, intelligent, highly educated and well motivated people.
Mistake 2: Not Researching Well the Company and the Offered Position
You should obligatory research the company, what it does, who are its customers and what is it target market, what is its position on its target market, how do they do their business, what is expected from you to do at the offered position. As more you read about the company, as well you will be prepared to apply for it.
Be sure to know well the position you apply for, what is expected from you at this job and what are the requirements for the candidates.
Writing a cover letter without rich information about the employer and the offered job position is impossible. There is no such term “just a cover letter”. The cover letter is specific to each company you apply to and each position you apply for.
How to Research a Company?
Internet. The first way to research a company is on the Web. Start from their Web site and read it carefully. Read the press releases, read what the others say about this company and its products in Internet. Read the forums, job boards, etc. If the company is Bulgarian, you could also find some information about its turnover, owners, etc. from the Bulgarian Trade Register (www.brra.bg).
Friends. Try to find friends of yours who work in this company or know something about it. They could give you important information about the company goals, products, services, business model, etc. They could give you important information about the company’s internal application process, typical interview questions, tests, exams, etc.
Other sources. Try to find other sources of information about the company, e.g. forum discussions, mailing lists, their customers, etc. It is nice idea to download their products (in case of product-oriented software company) and try them. You could contact their sales and support for more information. Thus you will learn more about how the company works.
Mistake 3: Missing Cover Letter
Some people think that nobody reads the cover letters sent as part of their job application and that the cover letter is a meaningless requirement. Such people believe that strong CV and rich experience is enough. In some companies this could be true, but in the best employers this is great mistake. Certainly, there are some companies that really do not care about the cover letter and as a rule these companies do not request it. If a cover letter is requested, be sure it will be read, at least at a glance.
In the most prestigious and well-structured companies the cover letter is very important and the human resources (HR) team at the company definitely reads it. If the cover letter is impressive, you will be immediately contacted and invited to an interview, even if your experience is not great.
Remember: it is always worth to send a well-prepared, impressive cover letter, especially written for exactly this company and exactly this job position. Never “reuse” your cover letters. A good cover letter for certain company and job position is in most cased bad cover letter for another p
osition.
Beware: If you apply for a second time in given company, be sure to rewrite your cover letter. Most good companies will disregard your application in case they find that you apply for a second time with the same cover letter. The same cover letter means that your motivation is not changed, your qualification is not changed since your last application.
Be sure that the HR professionals will try to find as much information about you as they can. They will search in Google about you, will try to find your Facebook profile, will try to find information about you from current employees, etc. The HR professionals never forget if you had ever sent a bad job application. They will find you, be sure. That’s why you should always carefully prepare your job application before sending it. Read this article to the end and think a bit how to proceed the next time when you apply for a job.
Mistake 4: Template-based Cover Letter
One of the best ways to guarantee a failure of your job application process is to use a template-based cover letter. Never do this! Once we received a really bad cover letter like this:
“Dear …, I would like to apply for Your Company because I am skillful and highly enthusiastic candidate. I want to grow in Your Company, to improve my knowledge and skills. Your company is the best and I want to be part of it. I am hard worker and will help your business to grow.”
The above is just a bullshit! This text says nothing about why you want exactly this position in exactly this company, how your experience in the past will help you do exactly this job, why you are really match the requirements from the job offer, etc. Moreover, using phrases like “Your Company” is always a bad idea! Once we even received a cover letter starting with “Dear …” with three dots coming from the template.
Remember: There is no way to write a good cover letter by template.
How to Write a Cover Letter
A good way for writing a cover letter is to read enough about the company and the offered position and following the requirements stated in the job offer and the detailed job descriptions to write roughly 1-2 sentences matching each of these requirements (not directly, not exactly in the order specified in the job offer and not exactly with their words an phrases!).
For example if the job requires “examine and analyze the technical documentation of competitors”, you could write for example that “in your previous job you had to read a lot of technical documentation and thus you believe that you will be able to find, read and analyze various types of articles, documents, manuals, etc.”. Don’t use this sentence in your cover letter. Say it with your words, matching your experience and skills. If you don’t have similar experience, say for example that “you like to read blogs and articles and you know that technical documentation is different but it should also be interesting and challenging”. Use your won words.
Another example: the job description requires “excellent communication skills”. You could write that “you believe you have a good sense of communication because you had organized a small technical seminar at school or at the university where you needed to contact the speakers, arrange the seminar venue, invite the attendees, attract sponsors, etc.”. This could never be used as template. It depends on your past experience, interests, skills, personal character qualities, etc.
A bad idea is to write “I am very good in examining and analyzing the technical documentation of competitors”. How you prove this? What are your arguments? If you are not good in something, just skip talking about it. You can’t say you are good at something without any arguments. How you know you are good in this? Just describe it.
Another bad idea: ”I have excellent communication skills”. This sound like “I am 18 years old and I have very rich experience in professional project management in large teams”. Saying something without arguments is always a bad idea. Either argument well your statement or just don’t talk about it.
Never Lie in Your CV and Cover Letter
Never lie! If you lie in your CV or cover letter, you will be caught at the interview and your eventual interview will end very soon. Just write in the cover letter something matching the requested requirements and provide valid supporting arguments. You could prove that you match certain requirements either by showing similar experience, or you by saying you have read about this in the past, or just sharing that you have a friend who always talks to you about this, or you just explain that you want to learn this and you even had read an article about it and watched a related video tutorial. Always use valid arguments and never lie. If you say you are … or …, find a supporting arguments.
Another example: “I am a hard-worker”. How you prove this? You could say that “at the university you always have high grades due to the fact that you always come very well prepared for the exams” or that “when an important work is waiting you, you could not sleep until you get it done”. Just use valid true arguments based on your past experience (not only work experience, but general).
Don’t Make Spelling, Punctuation and Formatting Mistakes
When writing your CV and cover letter, use a spell checker. Don’t make spelling mistakes, punctuation mistakes, etc. MS Word and the other text processing applications have very good spell checkers. Just use them.
Format your CV and cover letter well. Here you can use templates. Just type “CV template” or “sample cover letter” in Google and you will find lots of examples. Be sure to use only the styles, layout and formatting from the best examples you find and never use the text inside. Some companies even use an automated software to find whether your cover letter is template-based, so be sure to write it entirely in your words!
Mistake 5: Bad CV
Bad CV is another guaranteed recipe for failure. Writing a good CV is out of scope for our article but I will give few tips. Generally you should follow some good template and keep the CV short but comprehensive. It should start with:
Title, e. g. “CV”
Your name, email, phone, etc.
A personable photo (business style, not at the beach!)
Education section (university, period, specialty, title, etc.; may be moved down, because usually is not much important)
If you are junior candidate and you apply for your first job, you should be able to fit all this in one page. If you are more experienced candidate with 2-3 years of experience, you should be able to put this in two pages. If you are more experienced candidate, you should have already learned how to write a good CV and cover letter.
There are thousands of Web sites who guide you in better and more comprehensive way how to write your CV. Just type “guidelines writing cv” in Google.
Mistake 6: Wrongly Named Files
Many people ignore the importance of naming the files well. Bad naming like “New Document (2).docx” could make really bad impression. people who are strict and highly-qualified always name their documents in informative and consistent way.
The above naming rules apply not just to the attached file names but also to the sender email. Don’t use vulgar or commonly unacceptable nick names in your emails. Always put your full real name as sender, with the first letter capital and the others – lowercase.
Good sender and email (see the above explanations)
Good title line (e.g. Dear HR Manager / Dear Mr. Nakov / Dear Human Capital Manager / Dear Sir or Madame, etc.)
Job application sentence specifying the company name and the job position (e.g. I would like to apply for the junior software software engineer job in <company-name>, ref. no. 363, published in jobs.bg. Please find attached my CV and cover letter.)
Optionally you could add more explanations (e.g. I am a students in NBU, second year, …) but don’t duplicate the cover letter
Optionally you could add a finishing sentence (e.g. Being very enthusiastic about the great opportunity that your offer is giving I look forward to meeting you. Thank you for your time and consideration.)
Signature (e.g. Kind regards, Stela Koseva)
Indications of Bad Communicational Culture
Bad sender email – see the above examples
Missing title line
Missing job application sentence, specifying the exact company name and job position
Missing signature – you should always sing the mail by writing your name at the end
Conclusion
I will be really happy if more and more students read this article and follow these best practices and advices about how to apply for a job. I will definitely make a seminar about “How to apply for a job” and about all these mentioned typical mistakes and I even think about putting additional “Applying for a Job” topic to all my University and School courses. Most people really need to be explained how to write emails, how to write a CV and cover letter and how to apply for a job. Until these lectures and seminars become a reality, enjoy this article!
Last month I was invited by Microsoft to an interview in their largest european development center in Dublin. It was exciting trip and real challenge to see the Microsoft development live. I was excited of their professionalism in all directions:
Professional organization – phone interviews, invitation, flight, accomodation, etc.
Nearly perfect development process – like I read in the software engineering books
Very skillful developers and managers that interview me
Really professional way of conducting interviews
Challengeable product development
I was most excited on the people and the development process. I think this is what makes Microsoft so successfull: brilliant people and solid engineering process.
Microsoft made a small negligence: they didn’t ask me to sign any NDA agreement, so I can share all the interview questions to help all other candidates who want to join Microsoft.
Interview Questions @ Microsoft Dublin
I had 5 interviewers asking me lots of software engineering questions. The questions were very adequate for the team leader position that was my objective (“program manager” position in Microsoft is a senior technical position, like a team leader in a typical software development company). Interviewers were not just asking me to explain some technical concept or propose a solution to some real-world problem. They gave me a blackboard to write some code in order to see how I am attacking the problems, what types of pictures I draw, how exactly my thinking flows, etc.
I remembered most of the interview questions and the answers I gave. I hope my answers were good because I was approved and the recruiter from Microsoft sent me a job offer few days after the interview. Below are the questions with my answers:
Interview Question 1: You need to architecture the security for a bank software. What shall you do?
There is no exact answer here. This question is about thinking: follow the existing standards in the banking sectors, establish global security policy, secure the network infrastructure, secure the application servers, secure the databases, establish auditing policy, securing the operators’ workstations, secure the Internet and mobile banking portal, etc. Think about authentication (smart cards), authorization, secure protocols, etc.
Interview Question 2: You are given a string. You want to reverse the words inside it. Example “this is a string” –> “string a is this”. Design an algorithm and implement it. You are not allowed to use String.Split(). After you are done with the code, test it. What will you test? What tests will you write?
I knew an elegant solution in 2 steps:
1) Reverse whole the string char by char.
2) Reverse again the characters in each word.
You need to write a method Reverse(string str, int startPos, int endPos).
To test this method test normal cases first (middle of the word, beginning of the word, end of the word, 1 character only, all leters in the string). Check bounds (e.g. invalid ranges). Test it with Unicode symbols (consisting of several chars). Perform stress test (e.g. 50 MB string).
Write a method ReverseWords(string s). Test it with usual cases (few words with single space between), with a single word, with an empty string, with words with several separators between. Test it with string containing words with capital letters.
Interview Question 3: What is the difference between black box and white box testing?
Black box testing is testing without seeing the code. Just looking for incorrect behaviour.
White box testing is about inspecting the code and guessing what can go wrong with it. Look inside arrays (border problems), loops (off by 1 problems), pointers, memory management (allocate / free memory), etc.
Interview Question 4: What is cross-site scripting (XSS)?
In Web application XSS is when text coming from the user is printed in the HTML document without being escaped. This can cause injecting JavaScript code in the client’s web browser, accessing the session cookies, logging keyboard, and sensitive data (like credit card numbers).
Interview Question 5: What is SQL injection?
SQL injection is vulnerability comming from dynamic SQL command text created by concatenating strings with an input comming from the user, e.g. string cmd = “SELECT * from USERS where LOGIN=’” + login + “‘ and PASS=’” + password + “‘”. if username has value “‘ OR 1=1 ‘;”, any login / password will work. To avoid SQL injection use parameterized commands or at least SQL escaping.
Interview Question 6: What is the most challengeable issue with multithreading?
Maybe this is the synchronization and avoiding deadlocks.
Interview Question 7: Explain about deadlocks. How to avoid them?
Deadlock arise when 2 or more resources wait for each other. To avoid it, be careful. Allocate resources always in the same order.
Interview Question 8: Do you know some classical synchronization problem?
The most important classical problem is “producer-consumer“. You have several producers and several consumers. Producers produce some kinf of production from time to time and consumer consume the production from time to time. We have limited buffer for the production. When the buffer is full, producers wait until space is freed. When the buffer is empty, the consumers wait until some producers put something inside.
Practical use of the producer-consumer pattern is sending 1 000 000 emails (production) with 25 working threads (consumers).
Interview Question 9: You need to design a large distributed system with Web and mobile front-end. Through the Web customers subscribe for stock quotes (choosing a ticker and time interval) and get notified by SMS at their mobile phones about the price for given tickers and the requested intervals. A web service for getting the price for given ticker is considered already existing.
Use 3-tier architecture (ASP.NET, C# business tier, SQL Server database). Use a queue of tasks in the business tier and a pool of working threads (e.g. 100 threads) that execute the tasks. A task has 2 steps (query for the ticker price and send SMS). These steps are executed synchronously (with reasonable timeout).
We have another thread that performs SQL query in the database to get the subscriptions matching the current time and appending tasks for SMS notification.
We consider the SMS gateway is an external system.
Interview Question 10: How you secure the stock quote notification system?
We need to secure all its parts:
1) The user registration process – need to verify phone number with confirmation code sent by SMS. Need to keep the password with salted hash. Need to keep the communication through HTTPs / SSL.
2) The application server with business logic. Secure the host, put reasonable limitations to avoid flooding the server.
3) Secure the database (e.g. Windows authentication without using passwords).
4) Secure the network (e.g. use IPSEC)
5) Secure the access to the Web service (WS Security).
6) Secure the mobile phone (e.g. sending encrypted SMS messages and decrypt them with a proprietary software running on the phone).
Interview Question 11: How you write a distributed Web crawler (Web spider)? Think about Windows Live Search which crawls the Internet every day.
You have a queue of URLs to be processed and asynchronous sockets that process the URLs in the queue. Each processing has several states and you describe them in a state machine. Using threads with blocking sockets will not scale. You can still use multiple threads if you have multiple CPUs. The Web crawler should be stateleass and keep its state in the DB. This will allow good scalability.
A big problem is how to distribute the database. It is very, very large database. The key here is to use partitioning, e.g. by site domain. Take the site domain, compute a hash code and distribute the data between the DB nodes based on the hash code. No database server can store all the pages in Internet, so you should use thousands of DB servers and partitioning.
Interview Question 12: You have a set of pairs of characters that gives a partial ordering between the characters. Each pair (a, b) means that a should be before b. Write a program that displays a sequence of characters that keeps the partial ordering (topological sorting).
We have 2 algorithms:
1) Calculate the number of the direct predecessors for each character. Find a character with no predecessors, print it and remove it. Removing reduces the number of predecessors for all its children. Repeat until all characters are printed. If you find a situation where every character has at least 1 predecessor, this means a loop inside the graph (print “no solution”). Use Dictionary<string, int> for keeping the number of predecessors for each character. Use a Dictionary<string, List<char>> to keep the children for each character. Use PriorityQueue<char, int> to keep the characters by usign their number of predecessors as priority. The running time will be O(max(N*log N, M)) where N is the number of characters and M is the number of pairs.
2) Create a graph from the pairs. Use recursive DFS traversal starting from a random vertice and print the vertices when returning from the recursion. Repeat the above until finished. The topological sorting will be printed in reversed order. The running time is O(N + M).
Interview Question 13: You are given a coconut. You have large building (n floors). If you throw the coconut from the first floor, it can be broken or not. If not you can throw it from the second floor. With n attempts you can find the maximal floor keeping the coconut intact.
Now you have 2 coconuts. How many attempts you will need to find the maximal floor?
It is a puzzle-like problem. You can use the first coconut and throw it from floors: sqrt(n), 2*sqrt(n), …, sqrt(n) * sqrt(n). This will take sqrt(n) attempts. After that you will have an interval of sqrt(n) floors that can be attempted sequentially with the second coconut. It takes totally 2*sqrt(n) attempts.
Interview Question 14: You have 1000 campaigns for advertisements. For each of them you have the returns of investments for every day in a fixed period of time in the past (e.g. 1 year). The goal is to visualize all the campaigns in a single graphics or different UI form so the user can easily see which campaigns are most effective.
If you visualize only one campaign, you can use a classical bar-chart or pie-chart to show the efficiency at weekly or monthly basis. If you visualize all campaigns for a fixed date, week or month, you can also use classical bar-chart or pie-chart. The problem is how to combine the above.
One solution is to use a bar for each campaign and use different colors for each week in each bar. For example the first week is black, followed by the second week, which is 90% black, followed by the third week which is 80% black, etc. Finally we will have a sequence of bars and the most dark bars will shows best campaigns while the most bright bars will show the worst campaings.
I knew that I was approved even at the interview. It was a good sign that the manager of the development in Microsoft Dublin for the Windows Live platform Dan Teodosiu personally invited me in his office at the end of the interview day to give me few additional questions and to present me the projects in his department. Dan is extremely smart person – PhD from Stanford University, technical director and co-owner of a company acquired by Microsoft few years ago. It was really pleasure for me to meet him.
There were 2 teams in Dublin that wanted to have me onboard: the edge computing team working on Windows Live and the Office Tube team working on video recording and sharing functionality for the Microsoft Office. I met the manager of the Office Tube team at the end of the interview day to discuss their products and development process.
I was Offered a Senior Position @ Microsoft Dublin
Few days later I was offered a senior software engineering position at Microsoft in Dublin. I was approved and the recruiters started to talk with me about my relocation in Dublin. Few days later I received the official offer from Microsoft. It was good enough for the average Dublin citizen but not good enough for me.
I Rejected Working at Microsoft Dublin
Yes, I rejected the Microsoft’s offer to work in their development center in Dublin. The reason was that their offer was not good enough. The offer was better than the average for the IT industry in Dublin. It was good offer for a software engineer and if I got it 5-6 years ago I would probably accept it.
I was working as software engineer for more than 12 years. I am currently CTO and co-owner of a small software development, training and consulting company and I am a team leader of 3 software projects in the same time (two Java and one .NET project). In the same time I am a head of the training activities and I manage directly more than 10 engineers and of course I am paid several times better than the average for the industry. In the same time I am part-time professor in Sofia University. I am about to finish my PhD in computational linguistics. I have share in few other software companies. All of this was a result of many years of hard working @ 12+ hours / day.
In Bulgaria I was famous, very well paid, working at own company with no boss, managing development teams and having very good perspective for development. To leave my current position, I needed really amazingly good offer. I got good offer, but not amazingly good. That’s why I rejected it.
My Experience at Interviews with Microsoft and Google
1) Google interview were not professional. It was like Olympiad in Informatics. Google asked me only about algorithms and data structures, nothing about software technologies and software engineering. It was obvious that they do not care that I had 12 years software engineering experience. They just ignored this. The only thing Google wants to know about their candidates are their algorithms and analytical thinking skills. Nothing about technology, nothing about engineering.
2) Google employ everybody as junior developer, ignoring the existing experience. It is nice to work in Google if it is your first job, really nice, but if you have 12 years of experience with lots of languages, technologies and platforms, at lots of senior positions, you should expect higher position in Google, right?
3) Microsoft have really good interview process. People working in Microsoft are really very smart and skillful. Their process is far ahead of Google. Their quality of development is far ahead of Google. Their management is ahead of Google and their recruitment is ahead of Google.
Microsoft Seems Like a Better Place to Work than Google
At my interviews I was asking my interviewers in both Microsoft and Google a lot about the development process, engineering and technologies. I was asking also my colleagues working in these companies. I found for myself that Microsoft is better organized, managed and structured. Microsoft do software development in more professional way than Google. Their engineers are better. Their development process is better. Their products are better. Their technologies are better. Their interviews are better. Google was like a kindergarten – young and not experienced enough people, an office full of fun and entertainment, interviews typical for junior people and lack of traditions in development of high quality software products.
A week ago I visited Google in Zurich, Switzerland. Initially I didn’t consider working in Google and changing my job. During the years many of their recruiters asked me once monthly (at average) to join Google. I had so much invitations to join Google in Mountain View, Zurich, Munich and other locations that I finally decided to check whether they offer an interesting for me career opportunities by visiting some of their offices onsite. Wise people say that you could never know what is best for you unless you check it. I had many friends working in Google and most of them were excited about their job. After passing successfully two phone interviews I was invited at the Google office in Zurich for a comprehensive full day interview. It was a stirring event for me – to visit Google in their development center in Switzerland.
Google Interview Process is Like a Programming Olympiad
I was amazed how Google perform their interviews. Really! They asked me only about data structures and algorithms. I was feeling like at a programming contest. I needed to solve 10 Olympiad-style problems, each for 20-30 minutes. They requested to write a source code on the dashboard. Of course I solved the problems but I thought this is the first part and the real software engineering part will come later.
I will not reveal any of the questions (because I signed NDA) but their interview style was like at the programming contests and Olympiads. I had pretty rich experience with data structures, algorithms, algorithmic thinking and solving such problems in my childhood and during the student’s years, but I din’t expect that these years will come back some day.
Trust me, a 15 years old schoolboy who is a good programming contestant (e.g. some of the Bulgarian National champions) can pass these questions without having any experience in commercial software engineering. I expected more software engineering questions about software design and architecture, large-scale databases and information systems, Internet applications, information security, parallel programming, threads, synchronization, development process, software quality, testing, life-cycle, software project management, agile development, etc. but the interviewers didn’t even mention any of these topics. I applied for senior position and it was normal to expect serious software engineering and technical questions, but this didn’t happen.
That was all. Nobody asked me about my software engineering skills, software technologies, project management, and other skills. Only algorithms and problems solving, data structures, computational complexity, etc. This was whole the day, nearly 6 hours.
Google Interviewers Don’t Ask About Software Engineering, Technologies and Soft Skills
During the years I have been interviewed successfully in lots of interviews and I really have a good idea about how an interview should be conducted. My job is to conduct technical interviews and train people. I have been interviewer for tens of job candidates but I have never thought that some company could employ people only based on their technical skills, and particularly on just a piece of them: algorithms, data structures and problems solving. This is really unexplainable. The best companies I have worked with usually ask at their interviews about personal character, about non-technical skills, about future plans, etc. They try to assess the candidate’s motivation, to check whether his mindset matches the company’s beliefs and values, to check the team working ability, etc. This is usually done in addition to the comprehensive technical assessment with real-world problems regarding software technologies, software architectures, databases, distributed applications, Web applications, etc.
Below are few important (by myself) topics that Google don’t even touch at their interviews (by my recent experience):
1) Google interviewers don’t ask anything about software technologies, e.g. AJAX, Java, Java Web development, databases, SQL, ORM, XML, Web services, parallel programming, multithreading and synchronization, software architectures, design patterns, etc.
2) Google interviewers don’t ask about software engineering, e.g. the software project life-cycle (requirements, design, implementation, testing, etc.), continuous integration, agile development, project management, etc.
3) Google interviewers don’t ask about your experience. They don’t ask any questions about what is your current job, what is your experience, what projects you have worked on, etc. Your experience is just ignored. It is like you apply for your first job and you have never worked anywhere else. I was frustrated. I had nearly 12 years of experience as software engineer and they just ignored this. Normal companies always consider your experience and evaluate it with technical and other questions. Google Zurich just ignore it.
4) Google interviewers don’t ask anything about your personal character, e.g. are you a team pleayer, are you capable to manage a team, do you have experience working in an International team, do you have good communication skills, etc.
It is really strange. My experience shows that when you want to hire a software engineer, his personal character, mindset and soft skills are more important than his technical skills. Algorithmic thinking is important but is not enough for somebody to be a good software development professional and good team player.
How Google will employ somebody who has only algorithmic thinking and analytical skills without having any other software development skills, software engineering experience, the right mindset and attitude, team working and communicational skills? I have no idea. I asked my colleagues working for Google and they said they also don’t have an idea. Strange … I thought that these algorithmic interview questions are some kind of starter and the real interview will come later, but during the entire interview day I passed 10 interviews with 10 different people and all of them asked me nearly the same things: data structures, algorithms and solving Olympiad-style problems.
Why I was not Offered a Position in Google? Am I Overqualified or Underqualified to Work in Google or Just had Overexpectations?
I week after my visit to Google I was informed that my results at the interview were very good but I was not accepted because they don’t have a suitable position for me. It was strange because I solved well all the algorithmic problems during my one-day-long interview sessions in Zurich. I saw positive feedback at the faces of the interviewers. People asking me to solve algorithmic problems were happy of my solutions. It is not hard to notice when something goes wrong, but this was not the case. All interviewers were enthusiastic and happy of my answers and proposed solutions. Most of the other job candidates that had an interview in Zurich in the same time didn’t pass all of the 10 interviews and were rejected after the first 2-3 interviews. This gives me and additional sign that I performed well. If I was not performing well why I need to lose the time of 10 different interviewers?
I am confident about my analytical and problem solving skills because I was a leading programing contestant for more than 10 years, a champion in tens of Olympiads and programming contests (Bulgarian and International). The algorithmic questions were not complex for me, I just solved them in a good way. There were no other questions except the algorithmic ones so I believe I passed the interview with very good results. Unfortunately I was not offered a job position and I was not given a good explanation.
I have one suspicion why this happened: I was asked to fill an employment application form in which I was asked about the salary I expect. Of course, I requested many times better payment than my current payment in Sofia because I needed a good reason to move. Maybe I requested too much (I can’t say how much because it was also under NDA).
I was a medal winner at many Olympiads and champion in tens of programming contests, had nearly 12 years of commercial experience as software engineer, trainer, consultant, project leader and entrepreneur, and currently had very high technical position in Sofia. In order to make a big change in my life I needed really good reason. Maybe I had financial overexpectations?
The other possibility is that maybe I was overqualified to work in Google for the position they interviewed me. By the questions I was asked I can conclude that they needed a very junior software engineer with no experience and my rich experience was an obstacle. Whether this is true I am not sure, but definitely the interview was strange and I definitely answered all the interview questions well.
Few Words about Google’s Office in Zurich
The working environment I visited was really good and the people I met were very smart, energetic, smiling and positive. The people at the office, the office facilities, the equipment, the recreational room, the free-of-charge restaurant and many other things in Google Zurich made a very positive impression to me. I use many services from Google every day and I my positive attitude survives regardless of my experience in Zurich at my interview in Google. I think Google is a good company and something happened by mistake with my job application. Some day our ways could cross again, who knows?