Reinvent the WheelA lot of times, you’ll hear programmers say, “Do not reinvent the wheel”. What they are usually referring to is when an algorithm or application exists for a common problem and there is no need to replicate this. However, when you are first starting to program this can be an insanely helpful task. Programs like “Hello World”, a simple calculator, a timer, and a clock are all relatively easy to complete and plenty of people have made these types of programs, so there are definitely resources online to help you if you get stuck.Ask ProfessorsIf you are taking a programming course you are most likely being assigned programming problems as part of your course work. However, sometimes this is just is not quite enough. When I was learning how to program in Java, we only had six problems assigned all semester. Granted, these six were big projects, but there were no smaller assignments in between to help consolidate the knowledge we learned in class.If you are not enrolled in any programming courses and are just learning how to program for fun, you could always try reaching out to a computer science professor and ask them for ideas of what to program, or what they assign in their classes. Also, you could ask any friends who are taking programming courses what they are working on.Get a TextbookMost programming or computer science textbooks have a multitude of programming problems and projects within. Along with these assignments also come explanations for the concepts used in each task. Not only will you get an idea of what to program, but you can also learn a thing or two about the programming language that you might not have otherwise. When I took a Visual Basic programming course in college we used a textbook that had about twenty small applications per chapter. At the time I hated how many applications we had to create, but ultimately it helped me become a better program through constant repetition of key concepts and use of the language. The good news is you can probably find some of these textbooks at a library, online, or by borrowing one from a friend.Write a Program to Do Your HomeworkWhen I took accounting classes, having to write all of our financial statements by hand got to be a grueling process. Eventually, I got tired of it and wrote a program that created income statements, balance sheets, and cash flow statements based off of a variety of inputs. If you are enrolled in a class that requires repetitive tasks, writing a program to help you complete some of these tasks not only saves you time while doing homework or studying, but it also helps you to understand how the concept works at a fundamental level. When I created my financial statement application I no longer made little mistakes when writing the statements on exams, because I had to understand every little part of each of them in order to successfully replicate the process. Any type of math class, physics, chemistry, and finance are also great subjects to write programs for class.Ask Family and FriendsYou would be surprised how many times my friends and family members have come to me with ideas of programs or applications they have come up with. Fortunately for me, they know I am a programmer and usually come to me with the ideas without me having to ask. If you are stuck on what to program, just ask them! It is similar to having writer’s block and asking for ideas on what to write. Usually people have very generic ideas which will help you as a programmer when you have to take a high level description of an application and build an entire foundation under it.Browse the InternetWhen in doubt, Google it. Just by typing in “What to program” into Google’s search bar I received a variety of links to discussion pages, forums, and blogs about what to program. Sometimes universities will post curriculum or assignments to the public, which are easily found using a Google search.Search ForumsA lot of times when people get stuck on a program or application they turn to a development forum or StackOverflow for help. A good practice is to take their pleas for help and try to solve their issues. While some of these solutions can be extremely difficult to find, and sometimes they are impossible tasks, it is a good place to start. If you cannot figure out how to solve their issue, you have done no harm. If you are cunning enough to supply a solution, you have not only improved your own programming abilities but also helped out someone else!Challenge YourselfWith the growing trend of Hack-a-thons, more and more programming challenges have begun to surface. Some are for scholarships, some are for bragging rights, and some are actually for money. These challenges are another great way to find new ideas and to continue to improve your skills. Start off by finding the easier challenges that are meant for beginners and work your way to the more intermediate and eventually advanced challenges.Crowdsourced and Open Source ProjectsDon’t be afraid to get involved in crowdsourced and open source projects. This is another quickly growing trend that allows for developers from all over the world to come together and discuss, ask questions, and develop as a team. This is a great way to start working on real life applications that will have an actual end user.