views:

367

answers:

14

Possible Duplicates:
“Projects” for learning a new language
What would you write if you wanted to learn a new language?

I'm a rather junior programmer. I did a program in college on programming, so I've been exposed to a bunch of different languages (C++, Java, VB.Net, even COBOL) and I understand the basic concepts of building programs. This is to say, I'd easily pass the FizzBuzz test. My problem is that I don't have a lot of depth in many languages, and I'm having a few issues fixing that problem.

I've asked other groups how to solve this problem, but the conventional wisdom seems to be "code something." I'm not knocking this advice - it's great advice - but I'm just not sure how to get started. I don't seem to be affected by whatever bug gets into most programmers that they're going to "build a better mousetrap" and I don't find much in my daily life that calls out to be automated, so when it comes to creating sample programs to teach myself languages, I tend to come up short of ideas.

Are there any websites that deal with this problem, giving lists of sample projects to build? My maths are good to a point, but not to the that something like Project Euler is a viable option right now. Advancing my maths is a definite goal for the future, but it's not my primary focus right now.

Also, how much of a concern is language choice? I'm going to work through some C/C++ over the next little while, and intend to build a nice site in PHP/MySQL soon as well. I assume I'll need rather different exercises to get to a suitable level with each of these languages.

Thanks so much for any ideas you may have on this subject.

Cheers,

Kristina

+1  A: 

Try University sites that teach the languages you're into. They must have course assignments that help students understand each course. So, if I were you, I'd look into these, especially the homework later in the semester, because it tends to encompass many aspects of the language and usually contain some sort of mini-projects.

luvieere
This seems like the most promising option so far. I do worry that university level courses might require university level maths, for which I am ill-equipped. Have you ever used such resources? If so, are there any you feel comfortable recommending directly?
Kristina
Have you considered learning the mathematics involved? You don't have to become a mathematician to understand enough mathematics to get through an average computer science course.
JUST MY correct OPINION
@Kristina, I went trough university without a deep understanding of advanced math, the major was in Computer Science so the math was not so high-end. The programming tasks did not involve math almost at all, but unfortunately I can't directly recommend something yet, lest you're interested in coursework in Romanian :D
luvieere
A: 

intend to build a nice site in PHP/MySQL soon as well

Build a blog. But better not with a scripting language, but with a real programming language, like .NET or Java. Then you can build some multi-layer architecture, even your own framework. That will be a good exercise.

Then, when you've mastered it, build a Q & A site that will overthrow SO.

Developer Art
Kristina
"Real programming language"? What makes Ruby/Python/PHP not a real programming language?
Yacoby
@Kristina: A blog can be as simple or as complex as you concept it to be. I say, make a sketch of it and go implementing it. Your learn the most when you challenge yourself with some objective, not by doing simple things from the books.
Developer Art
A: 

Short answer: anything!

You will learn something by doing anything, it's as simple as that. Make a list of small, to-the-point challenges you would find interesting in your new language, and see if you can implement them. Ideally, these should be small pieces of code you can hack up in less than a day.

Some starters:

  • A simple GUI (using a toolkit perhaps?)
  • An algorithmic problem (graphs, lists, sorting, etc...)
  • A simple framework-based web application
Yuval A
"anything" misses the point of my question. As I said in my post, I've already been told to "code something" but I don't know what sort of small challenges to try.
Kristina
A: 

If you're starting with C++ then I'd create something graphical. This will get your hands dirty but will give something decent in return.

The killer for me would be to then rewrite the same program in java. This will give you experience in more than one language but also understand the differences between them.

If you want to involve networking, maybe a type of spider that will work it's way round a network and build a 3d map of sites. That should keep you busy for a while.

EDIT:

Maybe try here

Mark Lewis
I was rather assuming text/command line-based programs would be most suitable for a novice developer. I've heard that graphical applications in C++ are rather involved and require specific knowledge of the Windows API. I could easily be wrong, of course.
Kristina
As it sounds like you've had some experience in college, I thought it better to move you on from the exercises you will have already done. The other answers of blogs sound incorrect for C++ to me as you can get a blog set in about 5 minutes using other languages. Check my update.
Mark Lewis
I believe the blog suggestions were in reference to my mention of PHP, not C++.
Kristina
Good point. Although I think my point re using c++ and then java would give you experience in both compiled languages. Dunno why someone have downvoted me for this. It depends on your trepidation. I like to be dropped in the deep end, but that's just me. You don't need to know in depth win API to do c++ graphics.
Mark Lewis
+3  A: 

Program something that interests you. For me that has always been card/board games. Then when I got done with that, I would constantly build on them. These days my main interest is in rocketry, and there are plenty of problems to solve there. Just choose what interests you, break it up into small part (a key skill for any programmer) and build all the parts. Before you know it, you will have done a sizable amount of work and know much more about the language you use to implement it.

NickLarsen
I think this could be interesting. An application to play Crazy Eights or Texas Hold'em could be interesting challenges. In fact, any number of simple games could work (for example, Connect Four). Excellent suggestion. If I were able to vote for your answer, I would. I appear to have insufficient "reputation" for this however.
Kristina
I'll vote him up on your behalf. That's a good answer IMO.
JUST MY correct OPINION
A: 

Project Euler.

It will teach you programming fundamentals, which you seem to be lacking. I'm not saying you don't know how to program, but you aren't comfortable. You are to programming what a learner driver is to driving.

Dominic Bou-Samra
I referenced this in my question. I feel my lack of familiarity with certain maths would seriously affect my ability to complete Project Euler works.
Kristina
I wonder what a learner driver is to programming exactly?
Şafak Gezer
Surely you can do simple maths, like testing whether a number is prime or not, reversing a number.
Dominic Bou-Samra
+2  A: 

Here's the thing:

A lot of the difference between a professional programmer and someone who does programming as a hobby isn't in "understanding" of the language, exactly.

The difference is working in a team, on a big project.

This difference means that you have to learn a whole new set of skills:

  1. Using a version control system.
  2. Working effectively with other people.
  3. Working on a huge project with lots of code, but only working on a small part of that code (this is a big problem for lots of people who are used to knowing every line of the program, but it's an essential skill).

So if you're looking to "take programming to the next level", so to say, I'd suggest finding a large project and working on it. Luckily for you, there are many open source projects looking for a helping hand.

This will both get you working in a big project with a big team, and will also solve the problem of finding something interesting to work on: just look around for an open source project that sounds like fun to you.

Note: I am assuming you have enough knowledge to actually contribute to the project, or at the very least that you learn quickly enough. This seems about right from your question, but if you don't feel you're at that level yet, then this advice probably won't apply.

Edan Maor
Presumably I'm able to work in a team for certain languages, having worked with them in college. In college, I had the benefit of assigned work, and I lack this for personal projects. This will be excellent advice once I get a little more experience with some other languages and really "sink my teeth" into the endeavour.
Kristina
A: 
  1. Make tetris.
  2. Make a basic blogging system.
  3. Make an NTier application to handle a restaurants daily business.
  4. Make something using XNA.
Serg
A: 

A great thing to implement are raytracers, so I adopted them to be my standard application when learning a new language.

They allow you to use many language features - from basic math and list processing to OOP, functional programming and even parallelization - and fit to nearly every programming- or mathematical skill level.

A basic implementation may render to the console and is usually no more than 100 lines ;) E.g. see this implementation for a try.

Dario
A: 

Most previous answers are right, but don't hit the point: You want to have a very specific answer to a way to general question. You did not mention at all why you want to develop software at all. Software development is a very broad industry. The advice "develop anything, because you will learn anything" is perfectly right. If that's not explicit enough for you, you have to ask a more explicit question. Just a few questions you might think about:

  • Do you want to develop software for a living or just to automate some common tasks?
  • What is the business you want to develop software for? Web development is something completely different than developing software for integrated devices.
  • How much time, money, ... are you willing to invest?
  • What's you preferred way of learning: Being teached for finding out everything yourself?

That said, I would guess that having a look at Django is not a bad idea: Django is about web development, which is usually good to know. It's based on Python, which is general purpuse language (compared to PHP for example). Django is easy to get started, but there is a lot to discover and Django is well designed, so it's a good piece of software to learn from.

Achim
I want to develop software because it just seemed to click with my way of thinking. I did a class in high school, and I liked how straight-forward it was. Just logic, fitting things together. It was cool. I decided later that it would be a good career choice, and so I went to college and got a job doing COBOL for a bank. I do like to putter with these things, and automated some parts of my job with VBA. I'm not incompetent at programming, I'm just looking for a way to build a decent foundation, and do it right. Does that help?
Kristina
You will never be a complete programmer. Don't waste time thinking about the future fare away. Start from where you are and improve your knowledge. If you have already worked for a bank using COBOL, think about how to make this software better or how to develop it more efficient. Or about automating your job: VBA might be nice to get started, but VB.Net or C# are probably more powerful, so have a look at these.
Achim
A: 

The things you should be building depend heavily to the technology you want to master. For example, if you want to learn MEF (microsoft extensibility framework) then you'd better pick a project that would utilize it. Unfortunately you don't say exactly what you want to learn for me to try and give you some ideas. For C/C++ a great exercise would be to build a compiler.

ThanosPapathanasiou
A: 

Learn a little Java and modify the samples that come with Processing.org. If you like that, proceed with incorporating some of the Processing front-end into a Java application that's a little more robust.

This is a particularly good avenue if you're programming interest leans toward simulation and visualization.

Carl
A: 

So you sit in front of your computer with a blank editor, a couple of command-line tools (or maybe an IDE), and enough language knowledge in your head and want to do something - so the questions is - WHAT DO I DO?

I have 3 suggestions for you:

  • http://www.programming-challenges.com There is an accompanying book and it has all kinds of great sample problems you have to noodle through to make you think about data structure, algorithms, etc.
  • http://pragprog.com/titles/fr_quiz/best-of-ruby-quiz The book contents are language-specific to Ruby, but the nature of the puzzles contined in there are not. It has some real-world problems (like given a string, how can you verify it contains a valid U.S. phone number?), and some more abstract problems (like what sequence of moves will get a knight to visit every square on a chess board).
  • Visit a toy store and find puzzles that have simple board games and simple moves, then write a program to find every possible solution. You know the 'peg jumping game' where you have a pyramid of pegs in holes, you remove one, and start jumping and removing pegs, trying to end with just one peg? I know a simple (brute force) and a complex (taking board symmetry into account to reduce moves) solution to that puzzle, and imeplement in every language I try to learn. Thanks to that problem I got my head around how blocks worked in Ruby (several years ago), and how to effectively use the concept of immutability in Clojure last year (although my mind still bends while trying to think in lisp).
bokmann
+2  A: 

I like to create utilities for my team to use at work. This way I am learning something new, as well helping others out. This is much easier than trying to create something solely for myself for learning purposes. Find something at your job that could use a streamlined process, and develop a utility for it!

Todd Bumbarger