#1
  1. cosmos curator
    Devshed Novice (500 - 999 posts)

    Join Date
    Mar 2002
    Location
    Leeds, UK
    Posts
    678
    Rep Power
    14

    Where to get help writing "real" applications?


    I've been doing web development for 8 years now, straight out of school. I'm completely self-schooled (thanks Google!) and fully conversant with OO-PHP, JavaScript, XSL, XQuery, and a whole host of other web technologies. I think its time for me to start toying with some proper programming. I'm not sure about which language to use, but at the moment thats now what I'm having problems with.

    Coming from a dynamic-language background, I've been working in a land very distant to the actual hardware i'm using. I think its time I start working with bits and bytes rather than requests and responses.

    So, in order to get to grips with writing "real" code, I've decided that a good beginning app would be a database. I'm not talking building an Oracle clone here, just something to get me started with compilers, etc.

    My problem now is... where do I start? Once I pick a language, I'm sure I'll be able to get to grips with the syntax, idioms, and features very quickly.

    What I'm not sure on is where I can find some introduction into the things the manuals don't/won't cover - how the file-system really works, working with binary information, parsing input, and (importantly for a database system) storage models.

    So, can anyone point me in the right direction?
    R.T.F.M - Its the only way to fly...

    "No matter what you do, or how good it is, someone will always ask for more features. Or to change the colour of something, then change their minds."

    Personal:
    experience// 8 Years Web Development
    technologies// Standards-compliant, valid, & accessible (x)HTML/CSS, XML/XSL/XPath/XQuery/XUpdate, (OOP) PHP/(My)SQL, eXist/Xindice/XMLDBs
    packages// Photoshop, Illustrator, Flash/Fireworks/Director
    environment// FC2, MySQL, Lighttpd, PHP5, Mojavi/Agavi
    site// //refactored.net/ (Coming soon...)
    quote// Programming is the eternal competition between programmers who try to make apps more and more idiot proof and the universe that makes dumber idiots. So far, the universe is winning...
  2. #2
  3. cosmos curator
    Devshed Novice (500 - 999 posts)

    Join Date
    Mar 2002
    Location
    Leeds, UK
    Posts
    678
    Rep Power
    14
    nobody able to help me with this?
    R.T.F.M - Its the only way to fly...

    "No matter what you do, or how good it is, someone will always ask for more features. Or to change the colour of something, then change their minds."

    Personal:
    experience// 8 Years Web Development
    technologies// Standards-compliant, valid, & accessible (x)HTML/CSS, XML/XSL/XPath/XQuery/XUpdate, (OOP) PHP/(My)SQL, eXist/Xindice/XMLDBs
    packages// Photoshop, Illustrator, Flash/Fireworks/Director
    environment// FC2, MySQL, Lighttpd, PHP5, Mojavi/Agavi
    site// //refactored.net/ (Coming soon...)
    quote// Programming is the eternal competition between programmers who try to make apps more and more idiot proof and the universe that makes dumber idiots. So far, the universe is winning...
  4. #3
  5. No Profile Picture
    Contributing User
    Devshed Regular (2000 - 2499 posts)

    Join Date
    Jul 2006
    Posts
    2,270
    Rep Power
    1736
    We can help, just takes us time to reply. Give us time...
    When you ask a question, be prepared to tell us: what have you tried? If you think you don't need to try anything, we will never be interested in helping you. If you agree with the link, and you refuse to answer that question, you are being a hypocrite.

    Need help with broken code? Your question should be like a good bug report: (1) It has the smallest number of steps to reproduce the problem you see (2) It tells us precisely what you expected to see and (3) It tells us what you saw and how it differed from what you expected. We need all three to help you.
    Want better answers? Tell us what you Googled for and what steps you took to answer your own question.
  6. #4
  7. No Profile Picture
    Contributing User
    Devshed Regular (2000 - 2499 posts)

    Join Date
    Jul 2006
    Posts
    2,270
    Rep Power
    1736
    Coming from a dynamic-language background, I've been working in a land very distant to the actual hardware i'm using. I think its time I start working with bits and bytes rather than requests and responses.
    Normally when picking a language, I suggest picking a high level language first. But as you want to avoid high level languages, I recommend anything at the level of C# downwards. I would group C#, VB.NET, and Java, and perhaps C++ as a medium level language, while C as a low level language. There's more choices, but you'll probably want to start with something mainstream, so that's the list you get.

    You'll want to make a choice as to how low level you get. With C, C++, you definitely have to be aware of what goes on in the computer. Memory management, dealing with buffers, threading, and so on are all laid bare before you. With C# and .NET languages, as well as Java, the details are hidden from you although they aren't abstracted too much. In general, C and C++ are kings of system level programming and any high performance code, while .NET and Java are taking over applications development and most general programming scenarios.

    So, in order to get to grips with writing "real" code, I've decided that a good beginning app would be a database. I'm not talking building an Oracle clone here, just something to get me started with compilers, etc.
    It's a worthwhile choice, but don't expect to start coding this right away. Since you're learning a low level language, you'll spend significantly more time learning how to use your language. Also, you may have to learn algorithms that you never had to or even could have implemented before. In short, factor in some time for your learning.

    My problem now is... where do I start?
    By figuring out what language you want to use. I've shown you the pool of languages to choose from. You'll want to read up on the various languages and see which one seems most suitable for you. They all can be considered compiled languages, with C and C++ being natively compiled (Java and .NET compile to an intermediate language).

    What I'm not sure on is where I can find some introduction into the things the manuals don't/won't cover - how the file-system really works, working with binary information, parsing input, and (importantly for a database system) storage models.
    The best way to learn is to write applications that deal with those topics, or approach topics as if you were writing an application for them. I found that if a resource wasn't geared for programmers, it inevitably was uselessly superficial. Too many details get left out. Want to learn how filesystems work? Write applications that work with the native filesystem and perhaps write your own pseudo-filesystem. Working with binary information? Write applications that handle binary files. Parsing input? Try taking arbitrary and malformed data and trying to sort it out. Like webpages. More importantly, there is no better test of your knowledge than a working computer program. It's easy to see if it works properly (just try running/using your program), and also reasonably easy to see if it works efficiently (profile or just use the program).

    It's important that you learn the language properly. If you spend some time on C++ forums, you'll find us quite often correcting problems in how people use the language. Forget algorithms, they don't have the basics down correct. That's why, find out what the best resources for a language is. With C++ for example, it's in a selection of books written by the experts.
    When you ask a question, be prepared to tell us: what have you tried? If you think you don't need to try anything, we will never be interested in helping you. If you agree with the link, and you refuse to answer that question, you are being a hypocrite.

    Need help with broken code? Your question should be like a good bug report: (1) It has the smallest number of steps to reproduce the problem you see (2) It tells us precisely what you expected to see and (3) It tells us what you saw and how it differed from what you expected. We need all three to help you.
    Want better answers? Tell us what you Googled for and what steps you took to answer your own question.
  8. #5
  9. cosmos curator
    Devshed Novice (500 - 999 posts)

    Join Date
    Mar 2002
    Location
    Leeds, UK
    Posts
    678
    Rep Power
    14
    Originally Posted by Oler1s
    Normally when picking a language, I suggest picking a high level language first. But as you want to avoid high level languages, I recommend anything at the level of C# downwards.
    I was thinking about trying C# (or mono - I'm on ubuntu). I've spent a lot of my free time looking at languages, and because I don't want to mess about with pointers/memory management I looked at languages to do that for me. D (which is C++ minus the gripes and has garbage collection) and Erlang (because its functional, which I'm quite comfortable with after using XSL and XQuery) seem good choices for me, and I'll probably go with the latter.

    ..you'll spend significantly more time learning how to use your language. Also, you may have to learn algorithms that you never had to or even could have implemented before. In short, factor in some time for your learning.
    This is something I realize and am comfortable with.

    I appreciate your comments and thank you for your time. I think I might have asked the wrong question though.

    The main thing I'm looking for is where to start to get an understanding of the computer science/theory which is behind all languages - which would be i/o, storage models, filesystems, sockets. I know a little about sockets through working with PHP, but I don't think I know enough.

    Wikipedia is great, but it rarely gives links to what I need - examples. What I tend to find are very light articles ("a filesystem is somewhere you put your files") or scientific papers (just filled with algebra). There's little intermediate literature to get from the former to the latter easily (or without moving to the US and spending 10 years at uni).

    Where would I find that intermediate material? What sort of terms should I be throwing at Google?
    R.T.F.M - Its the only way to fly...

    "No matter what you do, or how good it is, someone will always ask for more features. Or to change the colour of something, then change their minds."

    Personal:
    experience// 8 Years Web Development
    technologies// Standards-compliant, valid, & accessible (x)HTML/CSS, XML/XSL/XPath/XQuery/XUpdate, (OOP) PHP/(My)SQL, eXist/Xindice/XMLDBs
    packages// Photoshop, Illustrator, Flash/Fireworks/Director
    environment// FC2, MySQL, Lighttpd, PHP5, Mojavi/Agavi
    site// //refactored.net/ (Coming soon...)
    quote// Programming is the eternal competition between programmers who try to make apps more and more idiot proof and the universe that makes dumber idiots. So far, the universe is winning...
  10. #6
  11. Periodically energetic Perler
    Devshed Regular (2000 - 2499 posts)

    Join Date
    May 2005
    Location
    Dublin, Ireland
    Posts
    2,265
    Rep Power
    538
    Originally Posted by neobuddah
    D (which is C++ minus the gripes and has garbage collection) and Erlang (because its functional, which I'm quite comfortable with after using XSL and XQuery) seem good choices for me, and I'll probably go with the latter.
    Pm me when your playing erlang, i'm having a little play with it to at the moment, but nothing as complex as a database yet.

    Originally Posted by neobuddah
    Where would I find that intermediate material? What sort of terms should I be throwing at Google?
    Couple of things you could do is look at some college courses on database programming (i'm sure theres some out there) and see if they have course recommended reading lists, they may also have notes on-line. A trip and search to sourceforge might reveal a database project you could then go through the source code which may shed more light on things.

    Good luck with your project.
    Displeaser
    Vi Veri Veniversum Vivus Vici.
  12. #7
  13. No Profile Picture
    Contributing User
    Devshed Novice (500 - 999 posts)

    Join Date
    Nov 2002
    Posts
    596
    Rep Power
    23
    Originally Posted by neobuddah
    Wikipedia is great, but it rarely gives links to what I need - examples. What I tend to find are very light articles ("a filesystem is somewhere you put your files") or scientific papers (just filled with algebra). There's little intermediate literature to get from the former to the latter easily (or without moving to the US and spending 10 years at uni).

    Where would I find that intermediate material? What sort of terms should I be throwing at Google?
    Try SICP, either as a book or series of videos (discussed here fairly often) especially as you're interested in fundamentals. If you stick with it you will learn an enormous amount. It will show you a very clean and powerfully expressive style, high level but more than capable of bit-twiddling when that's what you need to do.

    SICP uses scheme throughout. Don't be put off if you hadn't intended learning scheme - you don't need to know much to follow the examples and do the exercises and you won't regret it.

    Comments on this post

    • Schol-R-LEA agrees : SICP is great, but you need to be patient - it is very abstract, and you need to be mindful for it to help - the programming equivalent of tai chi, very internal and esoteric.
    Last edited by jamieB; January 15th, 2007 at 08:37 AM.
  14. #8
  15. No Profile Picture
    Contributing User
    Devshed Newbie (0 - 499 posts)

    Join Date
    Jun 2004
    Posts
    461
    Rep Power
    25
    If you are wanting to get a good understanding of computer programming in a since of computer theory and make it more of a science then I highly recommend a lisp. Scheme is nearly perfect for learning computer theory, which is why it is used in sicp. However with modern compilers, schemes such as gambit can produce code that is as fast if not faster than a pretty good c programmer. With Scheme you will learn a lot about programming and ideas in general about computers.

    I have been using scheme for about a year now and I am a really big fan of it, I have recently gone over to common lisp a bit more because of the readily available library's for it. That is one major downfall to scheme is that there is not much already written for it or there is and it is hard to find. I am using SBCL for common lisp if your interested, which is also another great language to look into and probably has just the same benefit of learning scheme.

    I have used erlang and I got pretty far with it, however it just didn't do things that I wanted it to do. It was lacking things like true string support and a powerful macro system that just turned me away from it. However with most modern lisps I am able to develop large apps like you would with erlang with multitasking. Even gambit can hold millions of threads. So the reason for me to continue using erlang was limited. I would not recommend it as a language to actually be used, I really do like its pattern matching conditions and message passing threading. Other than that its a very limited language.

    I would highly recommend not learning c or c++ as your first language, it will take you a long time to learn things and you will probably pick up a lot of bad habits that are prone to new c or c++ developers. I also don't recommend D or C# (with mono). D because it really is not complete and isn't used really anyware and c# because mono is not ready for production use and I am just not a fan of anything m$. I feel c# could be a good language however, I just think unless M$ helps projects make ways to interface with c# and such, like mono. C# will be limited to only windows and why just code for windows? I am a fan of java, it has its ugliness but all in all its a pretty solid language and I would much rather people use that than c#

    But I still believe that you should first learn scheme or common lisp. If you would like some more advise on which on is better you can pm me or something.
  16. #9
  17. No Profile Picture
    Contributing User
    Devshed Novice (500 - 999 posts)

    Join Date
    Nov 2002
    Posts
    596
    Rep Power
    23
    Originally Posted by CyBerHigh
    I would highly recommend not learning c or c++ as your first language, it will take you a long time to learn things and you will probably pick up a lot of bad habits that are prone to new c or c++ developers.
    Right on. I can't remember where the quote came from but in some paper it was said "it took the students 5 days to get lisp, except those who had never used C, who got it in two." Your mind is moulded to the shape of a programming language by the act of using it and it can be hard work to step back from that.

IMN logo majestic logo threadwatch logo seochat tools logo