Morendil comments on Open Thread: March 2010, part 2 - Less Wrong
You are viewing a comment permalink. View the original post to see all comments and the full post content.
You are viewing a comment permalink. View the original post to see all comments and the full post content.
Comments (334)
Request for help: I can do classroom programming, but not "real-world" programming. If the problem is to, e.g. take in a huge body of text, collect aggregate statistics, and generate new output based on those stats, I can write it. (My background is in C++.)
However, in terms of writing apps with a graphical user interface, take input in real-time, make use of existing code libraries, etc., I'm at a loss. I'd like to know what would be a good introduction to this more practical level.
To better explain where I am, here is what I have tried so far: I've downloaded a lot of simple open source programs that have a lot of source files. But strangely, whenever I compile them myself and get them to run, it just runs on the command screen blindingly fast and then closes, as if I'm missing some important step. (How are you normally expected to compile open-source programs?)
I've also worked with graphics libraries and read a book (IIRC, Zen and the Art of Direct3D Game Programming) and was able to use that for writing algorithms that determine the motion of 3D objects, given particular user inputs, but it was pretty limited in domain.
I've downloaded Visual C# Express, which was actually pretty helpful in terms of showing how you can create GUIs and then jump to the corresponding code that it calls. I wrote simple programs with that and even bought a book on how to use it, but it turned out to require very circuitous routes to do simple things.
Finally, becuase it's so highly recommended, and I've read Douglas Hofstadter's introduction to it, I thought about programming in Lisp, but the only programming environment for it that I could get to work was the plain old b/w command line, when I figured I'd need to have more functionality than that, and also the libraries to do more than just computation. (I'm experienced with Mathematica, which seems similar in a lot of ways to Lisp.)
So, an specific suggestions on where I should go from here?
What category of app are you looking to write, narrowing down the class "app with a GUI" a little?
Can you name a specific example of one you've tried to compile and run, and you've been confused at the result?
One general hint is that a good way to learn how to code up significant programs from scratch is to, first, get a significant program that works and modify or extend it in some way.
Also, be aware that there are several competing design philosophies when it comes to writing GUI programs, with very different outcomes in terms of maintainability and adherence to sound design principles. The "Visual" approach exemplified by the Microsoft line of tools leaves much to be desired in my experience, leading to spaghetti code too easily.
I prefer approaches in which graphical components are created programmatically, and where design principles such as MVC then serve to further structure the resulting code and drive the design toward high levels of abstraction. The various Smalltalk environments are a good illustration of that philosophy.
Spaghetti code is a primarily a function of the programmer, not the tools. This isn't to say the tools don't matter; they do; but the various competing tools each have their pros and cons, and it's a bit glib to suggest the Microsoft stack is obviously behind here. ASP.NET MVC, which you can use for web development in C#, is quite orthogonality-friendly.
I don't think this should matter for your answer, since it's just a barrier toward a broad class of programming I'm trying to overcome.
All of them ;-) but I'll give you a specific example when I get back to my home computer.
Well, that's kind of hard when they don't run even when you compile them. But on top of that, I haven't found any multi-source-code-file in which it's easy to jump to just the part of the code that implements a particular feature, usually because of poor documentation.