   Advice!
  Hey everyone,    I'm just looking for some input.  I've been admitted to Carnegie Mellon University, and I'm sure everyone here knows about their School of Computer Science.  I've only been admitted to the Engineering school, however, and I want to transfer.  I want to start a project and work on it throughout the summer and hand it in as a sort of example of what I can do.    My question is this: is there a specific project that is notoriously difficult to program?  Not only in terms of time I'd need to devote, but also one that would demonstrate above average problem-solving ability?  I'm sorry if I posted in the wrong forum, but you guys have been really helpful in the past, so I felt comfortable coming here.  Please let me know what you think!   
  It's fine to explore a challenging area, but I don't think it is healthy to seek something "notoriously difficult". Know your boundaries. There are endless things that are difficult to build or program, but that does not mean they are useful. Try thinking of something that is simple in design and concept, but can still offer an easy, convenient solution to a problem.I would argue that above-average problem solving ability is implied in properly trained programmers, so I think the mere fact you create something like I described above will demonstrate your ability fine.   ;Quote:Original post by zyrolastingThere are endless things that are difficult to build or programThere is no such thing as "hard to program". If something can be written in code, then it's a solved problem.Like the saying: French language isn't hard, in France even 3 years olds speak it.There is also no such thing as "hard equation". There might be a "hard proof of equation".Today's hard programming problems would likely be related to quantum computing or non-deterministic processors. The rest of programming is merely a matter of trade offs, and by far the biggest one today is development time. With possible exception of Google, where running time of an algorithm may matter more, but only in some cases.Another problem is that all the "hard" problems today require petabyte sets and huge data centers. Anything that can be done on dozens or so machines is effectively trivial.Quote:demonstrate above average problem-solving abilityThat would involve finding a problem that is inadequately solved, the devising a novel solution. There effort will lie in proof that proposed solution is superior to existing ones, or demonstrating that it is not. There might be some code written as well, but it's not needed.There are plenty of problems like that, but most of the time will be spent learning about existing solutions before finally trying to improve upon them. For this reason, solving such problems is a post-grad or even post-doc activity, completely focused on single specialized domain.It is highly unlikely that there is still any low hanging fruit that someone could pick in their garage in spare time.Computer science is not about programming, but about arguing about solutions. The ability to prove that one solution is superior (or inferior) to alternatives. Implementing such solution is not required, unless it goes to show that implementation itself has some interesting traits (simple, not viable, suitable for particular style, generic, specific, ...)Engineering is about finding simplest, cheapest, fastest way to select proven solutions that completely and just barely meet the requirements. Anything beyond is over-engineering.CS is simply too academic to prove ability with "hard" work. Just like one cannot prove themselves for a math course by solving lots of equations. But proving a solution of one unsolved problem is enough for a career. But those problems really are hard, experience shows that it takes several years.   ;  Undergrad or grad? -- from the naivete of this question I'm going to assume undergrad...You could write an interpreter for a nontrivial programming language that you designed and that is interesting. But I think your plan is not a good one i.e. no one will care and even if some professor does care it won't matter much. That's not the way things work in academia. Just do a year of the program you got accepted into, get straight A's, and then transfer into the program you want -- colleges generally give precedence to qualified internal transfers over external transfers. CMU really doesn't allow freshmen to arbitrarily change majors?[Edited by - jwezorek on April 22, 2010 10:33:02 AM];Quote:Original post by jwezorekYou could write an interpreter for a nontrivial programming language that you designed and that is interesting.Intepreters and compilers are probably one of the by far most and best solved problems in existence.The current work is related to run-time aspects of virtual machines and problems there are related almost exclusively to non-deterministic behavior (such as code suggest for dynamically evaluated context-dependent code, which is also a solved problem, available in many IDEs for years now). And many of the concepts have been published in the 90s, they are just deadlocked with various practical issues, platform fragmentation and simple fact that they don't matter even remotely enough.The other part has to deal with concurrency, which is in many ways a hardware related problem.   ;Quote:Original post by AntheusIntepreters and compilers are probably one of the by far most and best solved problems in existence.Yeah, no kidding ... if we're being asked about hard problems at the graduate level or for some technical definition of "hard" then the OP needs to be clearer, and then answers would depend on the OP's interests and background -- but that wasn't the sense that I got. Anyway, I was trying to answer the spirit of the question, not make up my own question and answer that.;  Thanks for the input, guys.  As you guessed, I'm a big noob, going to start my freshman year as an undergrad in the fall.  To answer jwezorek's question, CMU's CS program is extremely competitive(it is actually its own school, independent of the engineering school), and I doubt I'll be able to transfer without lots of begging.  I thought it would help to have a portfolio with something cool in it, but I trust your opinions much more than my own.   ;Quote:There is no such thing as "hard to program". If something can be written in code, then it's a solved problem. Like the saying: French language isn't hard, in France even 3 years olds speak it.Not to be disrespectful, but what relevance did that have? I was talking about the OP's current experience relative to project choices. There are endless things that are "hard to program" if you aren't ready for them. The advice was to stay in one's league until ready to move on, although I can see why you thought I was saying otherwise. [wink]Quote:Computer science is not about programming, but about arguing about solutions. The ability to prove that one solution is superior (or inferior) to alternatives. Implementing such solution is not required, unless it goes to show that implementation itself has some interesting traits (simple, not viable, suitable for particular style, generic, specific, ...)Engineering is about finding simplest, cheapest, fastest way to select proven solutions that completely and just barely meet the requirements. Anything beyond is over-engineering.Agreed.@OP, There is really no way we can suggest what project for you to undertake exactly, but along the lines of what Antheus said, you have the option to produce a solution that can change the way we look at old problems as well as new ones. Cryptography isn't explored too often, but the concept is simple enough for you to play with if it's of interest.   ;  Maybe you could write a ray tracer, there is lots of code out there for you to start with, and you can add stuff to it like anti-aliasing.I did that for my college graphics class.edit: for example, here is a link to some source code to a ray tracer for "educational purposes". the guy clearly states that it lacks optimizations. you could throw in something like anti-aliasing and that should work.;Quote:Original post by PaschoolgirlI doubt I'll be able to transfer without lots of begging.  Not right off the bat, no, you are going to have to do at least a semester of the program you've been accepted into, probably two semesters. But people get accepted into one program and switch into another literally all the time -- it's not an uncommon thing to do -- and if you work hard you can do it. Talk to your academic adviser about it. Quote:I thought it would help to have a portfolio with something cool in it, but I trust your opinions much more than my own.It's always good to have completed projects to show people. I just think it's unreasonable to expect completing an interesting project is going to wow people into letting you instantaneously enter another program.