chengmo03013106 wrote:
DJSPIN80 wrote:
Why don't you focus on working on algorithmic challenges through TopCoder? Building an application is one aspect of programming, the answer is solving puzzle questions. It's a great mental exercise, plus it'll harken back the things you learned in school. Learning to use a library like WPF or WinForms is cool and all, but if you can write a string munger then it's like knowing how to build a house but you don't know how to measure and cut.
In my point of view,the reason why the author did not focus on working on algorithmic is that we can get some more milestone or achievement easily on programming app, don't you think so?
It depends. In the case of new to moderately experienced programmers, I believe the desire to write an application is somewhat addicting, but ultimately futile because their knowledge of the various aspects of CS/SE are so immature that the task is simply too overwhelmingly. A lot of time is wasted trying to learn CS writing (and rewriting and rewriting... 10x) ONE application which could have been used more productively learning algorithms, data structures, a programming language or new language features which can be applied to EVERY application.
As you said, the EVERY application is not realistic project, it is useless for getting progress. Did I got the point ?
The inevitable outcome of this process is garbage; They simply don't have the requisite knowledge to create an interesting or complex application. They should spend their time developing a solid foundation.
The fundamental is more important than the EVERY application ?
Personally, I think that algorithm competitions are a great teaching tool: They challenge you with problems that are unexpected broadening your knowledge base; You have to learn algorithms and data structures (and to a certain degree computational complexity);
Yep, actually I study mechanic as major, not CS. So that I didn't learn too much about algorithms, data structures or compile theory.
You learn to debug and find bugs in software -- The TopCoder competitions, for example, include a challenge period where you can earn additional points by finding bugs in other competitors software; They promote problem solving -- exercising your mind; They also promote unit testing.
Does software mean that the code of open source software ? I have never doubt the source from internet, it is my weak point - always believe in others

It may be good for me to doubt some code and try to find bugs from it and solve it.
Why does this happen? Unfortunately, both software and software development tools promote this time wasting behavior because so much complexity is hidden from the user. Ask yourself how many freshman physicists take one or two physics courses then decide they're going to create a particle accelerator or a nuclear reactor? None. Why? Even if they could get their hands on some nuclear material, it is justly plainly obvious they can't successfully complete a task of this complexity.
Do you mean the realistic requirement is more complex than the project we learn from book ?
The complexity isn't hidden behind a little icon and UI created with modern development tools. Now granted, none of the newbies here are attempting to write a compiler, driver, theorem prover or some other relatively complex undertaking; Most of them really just want to create something that "looks cool".
I agree with you in this point. I supposed this situation is just happened in China before. It looks like almost every newbie is facing this problem. They always wanna "loos cool" application and blow it up.
However, even with these underwhelming ambitions (ie I'm going to use the GUI development tool that someone else created to create a UI that is almost as cool as something that someone else created ten years ago), they still fail because they don't take into account the 80% to 90% of development that lies below the surface of the UI. Here is the typical dialog:
(Inexperienced developer) Hey, can you help me with my [chat; talk; message; text; picture] app?(Experienced developer) Why do you want to write that? Aren't there already 10,000x apps that do that?Yeah, but we have an idea for one that is way better. It's a picture/chat application! The UI is going to be killer!!!Alright, what are you having trouble with?Well, for starters, what programming language should I use?Ugh... huh... what programming languages do you know?Well, I took [Java, C++,C#,Obj-C] for about two weeks, but my school dropped me from the course because I hadn't taken a prereq math class. That stupid math class... what the hell do computers have to do with math. The school is so dumb.Maybe you should take a few more classes then write the app? I don't think you're going to be able to do it now.Why not? I was going to use the XYZ gui tool to build the thing. I'm really good at this stuff -- I can do it if you help me some.Alright, are you planning on using a client-server or peer to peer network topology?Topology... that's one of the damn math classes that I have to take. I had no idea topology was about networking.{oh dear}Well, IRC does both, right? So it'll have to do both. Plus pictures, video and internet radio.That sounds like a lot of work. Have you ever worked with image or video data?Sure, I rip movies from dvd all the time. I've been using multimedia my whole life. I uploaded a video to YouTube over four years ago way before anyone else could.Never mind the media stuff. So you're not planning on using IRC or some existing chat protocol?Uh... I didn't think about that... Maybe I should find a programming language already have the protocol. Hmm... I don't know. I've spent all my time designing the UI in Flash.Also, are you going to store the user data? Were you planning on using a database or using your own data structures to store the data?The only data structure that I know about is an array. Can't I just put everything in arrays?Well... yes, but that would be a bit unusual. Plus, it would make writing the application really difficult.Yeah, maybe I should use objects instead. Well, I'll worry about the data later. I need to work more on UI. The data isn't as important.{Frustrated} Yeah, that sounds like a good idea. Good luck.Hah, vivid it. The point that we should pay more attention on fundamental but not application.
Every kinda app is based on data structures, protocol etc.
Say as if we are good at fundamental, application is not the big deal anymore.
So no matter which language we used, the core mission is always constant.