Question

i wonder apart from those very simple hello world apps, what other programs should i try developing for learning. i am entering uni next year and wonder what kind of programs will be developed in that environment.

this is not really a language specific thing, but if you want to know what i use currently mainly

  • windows: C#/WPF - i studied java/vb etc in poly but i think C# is the way to go, maybe even F#
  • web: PHP/MySQL, Zend Framework/Doctrine, + HTML/CSS/JS(jQuery) of course. looking to try google app engine with python too.

for now, i am thinking of

  • todo lists
  • apps that integrate with api eg. twitter/tumblr which i use
  • text editor - i am currently trying to develop a text editor that uses markdown and generates html files for viewing (link to blog entry). not very pratical after i started developing it. cos when editing theres no formatting and in HTML format, i cannot edit directly

  • blog software (for web)

Was it helpful?

Solution

Have a look at Project Euler. There's nothing else like it for sharpening your foundational programming skills.

OTHER TIPS

I'm currently writing a regex parser/matcher and its teaching me a huge amount about parsing and finite state machines and regular expressions themselves, among other things. The reason I particularly think a regex parser is useful is because the regex language is small, and is fairly limited in what it can do.

Another thing I did was to write an interpreter for Ook!, which is a simple task, but once again, teaches you a ton.

CodePlex.com lists many open source projects that were made using C#. You could take a look at the site to get some ideas.

You can also look at TopCoder. This site has great algorithms to learn and they conduct competition from time to time. The important advantage of this site is that you can see others source code for a particular problem and can learn more.

And even on the SE sites, you have to look at CodeGolf.

(This is mostly a mata answer, rather than a project list.)

Think about why you are writing the program: Will it be useful in its own right, or is it purely to learn an aspect of a tool/API/language?

In the latter case there is a benefit to the resulting program being as short as possible, and then just kept for reference.

In the former case why not extend the learning to good practice in all respects: assume you will need to maintain and extend it. Therefore use source control, issue tracking, refactoring, unit testing, ... as all of these things are at least as important for a developer as knowing another API.


How about a feed integrator:

  • RSS/Atom sources
  • Handle twitter using its API (and do link un-shortening)
  • Based on source allow pluggable post processing (e.g. downloading mp3s from a podcast feed)

(The idea is to focus on integrating different implementations of the same paradigm: scheduled HTTP get of an RSS feed vs. Twitter API vs. ... all of which are underneath a stream of entries with time stamp, source and content.

I learned a lot working on this-kind of my hobby projects:

  • Simple games (Snake clone, Tic Tac Toe clone, etc.)
  • Screen-savers

Not to mention - those kind of projects are incredibly fun to work :-).

Program a small game: it's fun and you learn a lot.

Some ideas:

  • Minesweeper
  • Tetris
  • A card game
  • Snake

And when it's done why not implement a highscore website...

Spyrograph. Specify dimensions of an outer ring, an inner disc, and pen point along its diameter. Plot the path of the pen as the inner disc rolls along the inside of the outer ring.

Change Maker. Input Cost and Amount given to teller. Calculate the optimal for teller to make change. There's a slow way and a fast way to solve this. Find the fast way.

OO-Life Simulation. Look up Life Algorithm. Make random starting state and output subsequent steps, using OO design to decouple logic from presentation. Give text output and graphical output.

Missionary/Cannibals Solver, Look up this famous puzzle. Write a program to solve it using search trees. Compare BFS to DFS.

Licensed under: CC-BY-SA with attribution
scroll top