Monday, November 18, 2013

The Flaws in Microsoft’s Windows Store

There is no question that Microsoft’s Windows Store is convenient.

  1. It allows people to download applications in a seamless way.
  2. It allows easy upgrades of applications.
  3. It allows anyone to develop and sell applications that can compete with the big players.
  4. It’s more secure than regular desktop applications because:
    1. Microsoft verifies applications before posting.
    2. The framework is more restrictive in what parts of the operating system the application can access
    3. Users opt into all security related features.

However, Windows Apps have a few major issues that Microsoft needs to address.

1: Performance

Microsoft’s Windows Store Apps have horrible startup performance.

Try this performance test on Windows:

  • Open Visual Studio and create a new Windows Store Application
  • Run the application without changes

The splash screen appears.

SplashScreen

After a few seconds, the main app starts.

  1. Switch to either the desktop or another Windows Store app
  2. Switch back

The splash screen appears again and stays there for at least a second.

Question: Why does it take so long for the application to start, even though there is no user code?

Answer: Windows stops the application and saves its state. It then reloads the app when the user switches back.

2: Attention Hog

Imagine you execute a command that takes ten seconds to complete. If you were running a traditional desktop application, you could switch to another program and then switch back when the application completes its task.

Unfortunately that is not an option with Windows Store Apps. Windows pauses the application the moment you switch away from the app.

It is true that applications can do some background work while paused. However, in my opinion, this will make the application unnecessarily complicated.

Also, Windows only gives the application 2 seconds of processor time for every fifteen minutes of run time1. That means the application might take hours to execute a command that would otherwise take seconds.

Currently the only thing the user can do is sit at the computer and do absolutely NOTHING while the application does what it needs to do.

Many applications work best when run in the background. A perfect example is your music application. It plays music in the background while you do other things. A Windows Store App is currently not an option since switching away would shut off the music.

I like listening to WARM 106.9 in my web browser. How would I listen to that if the web browser were not in the front and taking up monitor real estate?


The same is true for video processing applications that perform time-consuming tasks.

Windows Store applications force users to give applications 100% of their attention to the application and prevent them from multi-tasking.


What can be done?

The solution is to allow the user to decide if an application should be paused when switching away from it.

Ideally the user should have two choices:
  1. Users need a global switch to turn on or off whether all Windows Store apps are paused
  2. Users need to be allowed to create exceptions. Ideally users should be able to do this through the task manager.

Since the ability to pause an app affects power consumption, it would make sense that it be in ‘Control Panel\Hardware and Sound\Power Options’.

The user would then choose application sleep options based on if the computer is plugged in or if it is running on batteries.

By letting application run in the background like regular desktop applications, the time delay for switching applications would be eliminated. This would give users a better user experience.

3: Desktop Application

Users also can’t run Windows Store as desktop applications. This means some applications, such as a music player, can’t be packaged as a Windows Store application.

My desktop computer is not a phone. Why should I be limited to what a phone can do?

4: Windows Store Crashes

I notice that Windows Store applications can be very temperamental. For example I sometimes like playing Microsoft Solitaire or Mahjong. However, it tends to crash a lot when I do the daily challenges. This tells me two things:

  1. Microsoft’s Windows Store is running on Windows Azure and it is close to its limits.
  2. Windows Store applications can’t handle when connectivity is an issue.

5: Conclusion

Windows Store applications could be incredible if Microsoft gave the user more control of the user experience.

6: References

1. Professional Windows 8 Programming, Application Development with C# and XAML, 2012, ISBN: 978-1-1182-0570-9, page 168

Tuesday, September 24, 2013

2-Accessing Technical ability

In the technical world, accessing technical ability is essential when hiring new talent. The question is, how do we access technical ability?

1. Traditional Way

In the traditional way, we have four ways of accessing competency.

1.1. Accreditation
With accreditation, the candidate must have a minimum amount of training. This is usually in the form of a bachelor’s degree.

The strange thing is that the nature of the bachelor’s degree is not that important, only the fact that you have one.

Other types of accreditation is also useful. A list of certifications can be found here: 15 Top Paying Certifications for 2013.

With accreditation the hiring manager gains the assurance that the candidate has:

  1. Basic knowledge
  2. Understanding of the technologies needed to do the job

1.2. Past Performance
Past performance is a good indicator of present worth.

Hiring managers look at a person’s resume to see if a person’s abilities fit their needs. When there is a close fit, the hiring manager checks references and conducts interviews.

1.3. References
Reference checking is common among hiring managers. Unfortunately it is almost completely useless.

Because of the danger of litigation, many former managers will not divulge any information beyond the fact that the candidate worked there and what the official duties were.

1.4. Technical Interview
In a technical interview, the manager asks the candidate technical questions. The purpose of these interviews is to gage:

  1. Technical skill
  2. Problem solving ability
  3. Ability to ask questions and act on feedback.

Technical questions come in two forms: Knowledge questions and problem solving questions.

With knowledge questions, the interviewer is looking for basic knowledge, including:

  • Basic language skills
  • Object Oriented Programming principles
  • Design Pattern principles

With problem solving questions, the interviewer is looking to see how well the candidate can solve problems. These problems must be solvable on a black board in under an hour. As a result, they almost always revolve around data structures.

For general comments on technical interviews, see: Conducting Technical Interviews.
For some technical questions, see: Technical Interview Questions.

The Problem
The problem with answering questions on the black board is that the situation is contrived. Information workers never work solely on knowledge stored in their brains.

Instead, information workers work on their computers, using the tools available to them on their machines and the Internet. They also tap into their networks in order to close their knowledge deficit.

It is a fact of life that no information worker has all the information they need to do their job. The reason is because the field of information technology is rapidly evolving. New technology is being developed every day that no one thought of before.

In the same way, questions such as ‘What is a class?’ or ‘What is polymorphism?’ are irrelevant. It doesn’t matter if you can define what a class is. What matters is how the candidate uses these principles to solve real-world problems.

2. Better Way - Challenge Project

To access competency, I suggest you give the candidate a program to write. This program must have these elements:

  1. The candidate must use the same technologies required by the job on a day-to-day basis.
  2. The candidate must have access to a laptop and the internet.
  3. The candidate is given sufficient time to solve the problem.
  4. The candidate must be told to deliver three items: 1. Test and development documents. 2. Unit Tests. 3. Application source code
  5. The candidate must be advised that they will need to justify their design and explain the various design patterns used.

In order to access the candidate’s performance, the proctor must be someone who has already written the same type of program. This ensures that they have what it takes to access competency. This also tells you how much time you need to give the candidate to solve the problem.

2.1. Problem
The problem to solve will be a simple program using the relevant technologies.

For Example:

  • Create web page to host an application
  • Create a web service and use the service
  • Create an application

Possible programs:

  • Puzzles
    • Crossword
    • Jigsaw puzzle
    • Sudoku
  • Games
    • Space Invaders
    • Checkers
    • Game of Go
    • Card games (Ex. Solitaire)
  • Applications
    • Simple archiving tool
    • Paint program
    • Notepad program
    • Simple calculator
  • Web Services
    • Return today’s weather for a given area
    • Storage service for an application you are developing
    • Authenticate user for application

2.2. The Solution
The candidate must supply three things things for a successful solution.

2.2.1. Documentation
The candidate must create test and development documents for the application being developed. The proctor goes through the documentation with the candidate to access how well they can express their design considerations in writing.

2.2.2. Unit Tests
The candidate must write unit tests for the application.

Keep in mind, tests are design specifications given form. They define how your application is supposed to behave. Therefore it is essential that developers understand the basics of testing.

2.2.3. Application
The candidate must submit a fully functioning solution by the end of the time period, or explain why they couldn’t perform the task.

In this step, the candidate is encouraged to ask questions.

However, you must not penalize a candidate for not asking questions. If they don’t ask questions, assume they know what they are doing. At the end of the day, the only thing that matters is results. That is what you must judge them on.

When the assignment is complete, we go to the next step…

2.2.4. Walk-Through
The candidate must walk the proctors through the application and answer all questions pertaining to design.

The candidate must also identify all the design patterns used in their application and be able to explain why they were used. More importantly, they must explain why certain design patterns were not used.

2.2.5. Correction
The candidate will get feedback on their program and then must use that feedback to make corrections. In addition, the proctors should give additional design requirements to work on.

This allows the proctors to see how well the candidate deals with code reviews and changing requirements.

When giving code reviews, the proctors should also give bad suggestions. This will access how the candidate reacts to code reviews. The good candidate will question bad or confusing code reviews and require clarification.

2.2.6. Takeaway
Only by placing the candidate in a real-world situation can a proctor access the abilities of a candidate as to how well they will fare in the job they are applying for. This allows the candidate to be accessed from the beginning to the end of a development cycle.

3. Better Way – Published Works

Professional developers have several ways to advance their careers. When looking for talent, here are some things to keep in mind.

3.1 Accreditation
Professionals take training sessions and formal tests to show their level of knowledge.

3.2 Professional Organizations
Professionals also participate in professional groups dedicated to the advancement of software engineering.

Here are some of the organizations I participate in:

3.3 Collaborate Projects
Another way to advance their careers is by participating in open source projects. It is here that their skills can be showcased in a project where multiple people collaborate in.

An example of one such site is Code Project. Here is my profile.

3.4 Code Sharing
There are many sites dedicated to code sharing. Here people can post questions and answers, thereby improving their reputation.

One such example is Code Project. Here is my profile.

3.5 Blogs and personal web sites

Don’t forget blogs. Blogs and personal web sites allow us to showcase our knowledge by publishing articles on various topics.

Speaking of publishing, an important thing to look at is any books developers have published. Here is a book I’m working on: Nuts And Bolts (beta version)

4. Hierarchy of Knowledge

All knowledge and experience is hierarchical in nature. The more advanced branches of knowledge builds on the basics. Only when the basics are mastered can someone advance.

Many hiring managers narrow down the candidates by asking all candidates entry-level questions in some sort of phone screen. They then ask more advanced questions to the remaining candidates until only few candidate remains. They then use other methods to choose the winner.

As you may have guessed, I don’t believe that’s the smartest way of choosing the best candidate.

For example, would you ask a journalist if they know how to spell? Keep in mind that some of the greatest journalists are lousy spellers.

In the world of martial arts, there is a saying. The student swordsperson is obsessed with techniques. The master has forgotten the techniques and has mastered the art of the sword.

What’s important isn’t definitions of classes, polymorphism or whether you have used Visual Studios. At the end of the day, the only thing that matters is how well you can satisfy the IT needs of your customers.

Comment: Ask a question even a fool can answer and all you’ll get will be fools. Ask a question only an expert can and you’ll only get experts.

Aim for what you need and be ware the pitfalls of shortsightedness.


5. Contract to Hire

In my opinion, the best way to hire an employee is to hire them as a contractor. You can then access their ability over the course of several months. If you like them, then you can hire them.

The advantage is that you can let them go without obligation should you realize you made a mistake. This is something you can’t do easily with an employee.

Remember: Understanding is more important than knowledge. In this changing world of ours, those who pursue understanding over just the acquisition of skills will serve your company more than anyone else.


6. Leave it to the Professionals

The evaluation of professional skills requires years of experience. It is not something just anyone is qualified to do after just one or two classes. Where possible, this should be outsourced to a third-party company.

You give the consultant company the list of technologies your job requires and the level of competence you require and they supply the candidate. You then give the candidate a one-year, no obligation contract. If the person works out, you offer them a full-time job.

Successful hires increase the contracting company’s reputation, putting pressure on them to advance the science of human resource management.

7. Suggested readings

IceRocket Tags:

Sunday, February 17, 2013

Nuts And Bolts - A Guide to Software Engineering

Hi All,

Here is a draft copy of a book I'm working on. This is my view of the software engineering process. I hope you like it.

Book: Nuts And Bolts

It focuses on the three principle areas of software development – namely  Project Management, Feature Management (Testing),  and Product Development.

It’s a work in progress, so please excuse the spelling mistakes.

I welcome any suggestions or comments you have.

Thank-you in advance for your input.
Trevy

Thursday, February 14, 2013

Software Analysis

Software Analysis is the art of gaining knowledge of an object, in terms of itself, as well as in terms of how it interacts with other objects in the world and the world at large. We must view these interactions in the infinite contexts that these interactions take place, as well as through all possible life cycles of its product-world interactions. Keep in mind that an object will behave differently in different settings. It will also behave differently when interacting with different types of objects. Then there is the history of the object to take into consideration.

Needless to say, complete knowledge is not just difficult but theoretically impossible. The reason is because of unspoken assumptions and hidden variables. Given this, the best thing we can do is start with the intended functionality of an object and work from there.

Functional Analysis - Intended use

The intended use is the official use of the product. It is absolutely essential that the product work correctly for the proper use of the product. Before any testing can begin, you need to know the intended use of the product or service, who the end-users are, and in what context people will use it.
Let’s use a pencil as an example:

Function

The intended use of a pencil is to write.

Context

We normally use pencils to write on paper. Should we expect the pencil to behave the same for all types of paper? The answer is, No. The pencil will behave differently on different surfaces.
 
What sort of surfaces is possible for writing? We have the standard notebook, wax paper, cardboard, sand paper, wallpaper, the hard cover of a textbook, etc. The more types of paper surfaces we can think of, the better our testing can be.

However, paper is only one category of surface on which people write. To think of other surfaces, we need to think of who will use pencils in their daily lives.

Users

Secretaries, construction workers, astronauts, and deep-sea divers are a few people who would use pencils. We have already explored the surfaces on which a secretary might write. They include notebooks, books, envelopes, loose paper, and self-sticking notes.
 
Construction workers write on wood, particleboards, and fabricated surfaces. They do this in order to mark where to cut and drill.

Deep-sea divers write under water. A deep-sea diver needs a waterproof surface on which to write. To best serve the diver’s needs, we need to design not just a pencil but surface on which to write on, since they both work in concert. The same reasoning applies to astronauts. We normally don’t think of standard paper and pencil as being a single design unit, but that’s because we are so used to it.

Astronauts need to write in space. Astronauts have unique requirements. They wear bulky gloves. This means that the pencil needs to be equally bulky. They are in the vacuum of space. This places unique requirements on pencils and writing surfaces. Then there is the issue of no gravity and wild swings in temperature.

Construction

The construction of an object has a profound effect on its function. It affects performance, security and maintainability, to name a few things.
 
Pencils are usually made of graphite, but other materials are used. For instance, colored pencils in an arts store are made of a waxy substance. This, together with a pencil’s hardness determines how well a particular type of pencil will behave when writing on a specific surface. (The artist is a user we didn’t think of before.)

In terms of hardness, the most common writing pencil is #2HB. This is popular for writing tests, because automated test scanners see them best.

Life Cycle (Use Cases)

Many companies try to steal the best people from other companies. In my opinion, this is a lose-lose situation.
 
What is a pencil’s life cycle?

The pencil is manufactured, used and then disposed of.

A pencil gets used, gets worn down and gets sharpened for further use. Is the pencil easy to sharpen or does the tip break easily? Does the pencil hold a sharp point or does it need to be sharpened often?
Then there is the issue of erasing pencil marks. This is where we test pencils and erasers on different surfaces. On some surfaces, pencil marks cannot be erased. Is that important?

There are many uses for pencils other than writing, but those are beyond the scope of this type of testing. If a customer finds a use for a pencil that doesn’t involve writing, then that’s free functionality. The manufacturer could optimize the pencil for this use if there is marketing incentive.

Safety-Security-Sustainability

Let’s look again at the pencil’s life cycle.
The pencil is manufactured:
We need to look at the manufacturing process. This includes how the materials were obtained, assembled and shipped to the end user. This is becoming important from an environmental and sustainability point of view. Also, the safety of workers is paramount.
The pencil is used:
Is it safe to be used by children and adults? People chew on pencils. Is the pencil covered with lead-based paint? Are the shavings dangerous? Does the shaving require special disposal? The graphite tip sometimes breaks off. Will that cause problems if swallowed?
The pencil is discarded:
Does the manufacturing process take recycling into consideration?

Summery

  1. Function - What are the intended functions of the object?
  2. User - Who are the intended users?
  3. Context - What are the contexts in which each user will use it?
  4. Life Cycle - What is the product life cycle?
  5. Safety, Security, Sustainability – Helping the world become a better place.

Functional Analysis - Unintended use

For various reasons people will use items in unintended ways. Sometimes the user wants to innovate. Other times the user misunderstands the correct function of the item and so uses the product in an inappropriate way. Often the user just makes a mistake. Ideally, the product should handle these scenarios in a safe manner.
 
There is a saying: “Fool-proof implies a finite number of fools”. From a cost point of view, it’s not possible to protect all fools. It’s not even to possible to predict how a fool will behave because even they don’t know. The only thing we can do is use the past as a guide to logically analyze the situation.

Functional Analysis - Malicious use

When it comes to physical objects, it’s difficult to prevent people from using items in a destructive manner. No one can prevent a person from stabbing someone with a pencil. There’s nothing a manufacturer can do to prevent this scenario, other than placing a warning label.
 
However, there are many things we can do to keep people and the world safe.

(This is an excerpt from a book I'm writing on Software development.)

Conducting Technical Interviews - Part 1

I just came from an interview with a high-tech company. They were looking for programmers with several years of programming experience. I was expecting them to ask questions about my programming experience.
Instead, they asked questions that resembled a 1st year computer class exam:
  • What is an interface?
  • What is a class?
  • What is polymorphism?
These questions don’t reveal anything about a person’s experience or abilities. In fact, these questions are worse than useless.
These questions penalize experienced developers. After years of industry experience, the answers to these questions are forgotten. I may not be able to formally define an interface, but I’ve used interfaces in countless situations. Ask me a question regarding a real-world problem and I will be able to answer it with ease.
The same thing is true with some of the greatest minds in history. They can produce incredible work. However - they can't explain how the do what they do. If you ask them, they typically say, "Just do it." or "I don't know. Needless to say they will fail all technical interviews.
On the other hand, a newbie will be able to tell you what an interface is, but may not know how to use it in real-world situations.

1. The 30 Second Interview

Countless studies have shown that we decide whether we like a person in the first 30 seconds. The rest of the interview is used to justify our feelings.

An interview is an unnatural situation to many people. It causes them to shut down and not act normally. This means that we are not looking at people at their best. Countless excellent candidates are passed over because of this. On the other hand, some people act confidently even though their abilities don’t justify it. A good interviewer needs to take this into consideration.

2. So how do we select someone to hire?

Past competence is a good indication of future worth. If a person does well in the past, it’s a good indication that they will do well in the future. The above company should have asked what programming challenges I faced and overcame. This would allow me to relate my experiences in terms of their needs.

3. So how do we select the best candidate?

In my opinion, the only way to know the qualifications of a person is to work with them for at least a month. You put a new hire on probation without obligations on both sides. After the probation period ends, you have the choice of letting the contract end, or offering the person a permanent position in the organization.

4. So how do we select someone for this probation period?

For candidates, the best companies turn to their network. Word of mouth is the No 1 method of finding people. Companies look to their network to find out about prospects.
In the Brave New World we have entered, there is a new way of finding about candidates. This is the Internet. This is especially true of the social networking sites such as LinkedIn, FaceBook, and Twitter, to name but three.
Of course, this won't replace face-2-face interviews. I think the interview is like a date. Each is trying to decide if they can live with the other person. The technical interview is just a means to that end.

5. Microsoft Technical Interview Questions

Microsoft likes giving programming questions in their technical interviews. These questions are useful in finding out how people think. As a result, it doesn’t matter if the candidate gets it right. The important thing is that the candidate explains their logic.

It’s fundamentally important that the interviewer knows how to solve the programming question before they give it to the candidate. There is nothing worse than questioning a candidate and then having the candidate correct your mistakes. It’s embarrassing for both you and your company. It’s also bad for the candidate because now the interviewer resents them.
I was in this situation myself. I felt that the interviewer was incompetent and wondered why he got hired. Needless to say I didn’t get the job.

6. Suggested Questions

Here are some technical questions I have collected over the years. It’s best you work out the answers to these questions yourself. If you cheat, you will only hurt your company and yourself. I’m only including questions I myself have solved. I will NOT give out any answers because I think that's a disservice to the community. Technical Interview Questions.

7. Home Grown Diamonds

Many companies try to steal the best people from other companies. In my opinion, this is a lose-lose situation.

We all know that it harms the company that is losing talent. However it doesn't stop there.
It also harms the company that is stealing the talent. They have to pay a premium for this talent. Also, what's to stop someone else from stealing this person? In my opinion, this is why executives get overpaid.
The best solution is to take a good worker and turn them into a Star.
A good candidate has these qualities:
  1. Easy to work with.
  2. Intelligent.
  3. Dedicated to self-improvement.
  4. Experienced in the specific technologies your business depends on.
Find a candidate with these qualities, and then help them to be a Star at work. To this end, I would like to suggest to you my favorite book on the subject of productivity. It’s called, “How to Be a Star at Work: 9 Breakthrough Strategies You Need to Succeed
I'll talk more about productivity in a future blog.

8. Some Further Reading

Technical Interview Questions

Hi all. I would like to share with you some technical interview questions I’ve collected over the years. It’s best you work out the answers to these questions yourself. If you cheat, you will only hurt your company and yourself. I’m only including questions I myself have solved. I will NOT give out any answers because I think that's a disservice to the community.
In each category, the questions are arranged from simple to advanced

Arrays 1-D

  • Reverse an array of integers.
  • Shuffle Cards.
  • Bubble Sort an array of integers.
  • Find element in an array of integers using binary search.
  • Remove duplicates from sorted array of integers. Pad remaining cells with zeros
  • Remove duplicates from unsorted array of integers. Pad remaining cells with zeros
  • Find first element in array that is duplicated/not duplicated.
  • Given an array of size N in which every number is between 1 and N, determine if there are any duplicates in it.
  • Given an array t[100] which contains numbers between 1..99. Return the duplicated value. Use only one iteration, one int to store intermediate results.
  • Given an array containing both positive and negative integers, find the sub-array with the largest sum. What if you don’t want negative numbers in the returned sub-array?
  • Implement the following function, FindSortedArrayRotation(int [] arr). arr is an array of unique integers that has been sorted in ascending order, then rotated by an unknown amount X, where 0 <= X <= (arrayLength - 1). An array rotation by amount X moves every element array[i] to array[(i + X) % arrayLength]. Can it be done in less than linear time?

Arrays 2-D (Matrix)

  • Transpose a square matrix. I.e. interchange the rows and columns.
  • Given an int array, zero out the vertical and horizontal column containing a zero.
  • Find saddle point. A matrix is said to have a saddle point if entry arr[r, c] is the smallest value in the ith row and the largest value in the jth column. A matrix may have more than one saddle point.
  • Find plateau. A matrix is said to have a plateau point if entry arr[r, c] is the largest value in both the rth row and the cth column. A matrix may have more than one saddle point.
  • Write a routine that prints out a 2-D array in spiral order!

Binary Search Tree

  • Insert node into binary search tree.
  • Delete node from binary search tree.
  • Write a function to find the depth of a binary tree.
  • Find Lowest Common Ancestor, given: Node LCA(Node root, int left, int right);
  • Print elements in-order (L, C, R).
  • Convert BST into a linked list.

Linked Lists

  • Insert element into linked list.
  • Delete element from linked list.
  • Delete alternate nodes in doubly linked list.
  • Find middle element.
  • Merge two sorted lists.
  • Remove duplicates in sorted list.
  • Find if list is circular. (No begining or end node
  • Find Mth to last element in linked list.
  • Reverse linked list.
  • Delete the nth node, given a link to that node. You have no access to the previous node for the exercise.

Queues & Stacks

  • Implement a queue only with stacks.

Text Strings

  • Given a string s, find character c and return its position.
  • Write a function to check if a given string is a palindrome. Ignore white spaces. Ex. “Able was I ere I saw Elba”
  • Given an arbitrary string, return a string with no duplicate characters. String RemDup(String s)
  • Given two strings S1 and S2, remove characters in S2 that appear in S1.
  • Given two strings, write a function that would print characters in the first string that are not in the second string and also print characters in the second string that are not in the first string.
  • Reverse words in String. (I am Sam) => (Sam am I)

Bit Operations

  • Multiply num by 7 without using multiplication (*) operator.
  • Find number of set bits in an integer.
  • There are two integers, ‘a’ and ‘b’. Swap the contents without using a temp variable.
  • Print integer in base 2.General
  • Find nth factorial. (0, 1, 2, 3) => (1, 1, 2, 6)
  • Find nth Fibonacci number. (1, 2, 3, 4, 5, 6) => (1, 1, 2, 3, 5, 8)
  • Print integer one digit at a time, without storing any intermediate results.
  • Given the time in hours an minutes, find the angle between the hour hand and the minute hand.
  • Write a function that takes as its arguments 3 integers > 0. If the product of the integers is even, then return the one with the lowest value, else show 0.
  • Parse integer from string.

Recursion

  • Print numbers from 1 to 100 and then 100 to 1 without any for or while loops.
  • Print linked list in reverse order.
  • Reverse a singly linked list recursively.
  • Find nth factorial. (0, 1, 2, 3) => (1, 1, 2, 6)
  • Find nth Fibonacci number. (0, 1, 2, 3) => (1, 1, 2, 6)
  • Sum the digits in a number. int sumOfDigits(int x); (If x is 2345, return 9 [2 + 3 + 4 + 5])
  • Count the number of set bits in an array of integers without loops.
  • Print all permutations in a string.
  • Count square clusters in grid.
  • Find way out of maze.
I hope you have fun with these problems.