Good Starting Projects

February 18, 2004 | View Comments (48) | Category: Programming

Summary: New languages and new projects to help fulfill my programming lust.

The world of programming has been slowly calling me back. Maybe it's just my geek urge to create something, but no matter what it is I am in the mood to start a mini-programming project. More so I think I wish to learn a new language. I do not wish it to be in C# or PHP because I am working on a C# project already and I have done PHP many times over. Granted I am no expert in either language so there are many things I still need to improve upon, but programming languages are tools and I wish to increase the size of my toolbox. That leaves me with three questions to ask you. Which language should I go for? What should the beginning project be? What are some good online resources for the chosen language?

Trackback URL: http://9rules.com/cgi-bin/mt/mt-tb.cgi/152

Comments

#1

Have you thought about ColdFusion? I'm finding it pretty easy to pick up.

Vinnie Garcia (http://blog.vinniegarcia.com/)

#2

You could always go with ASP or PERL.

I know a little of both, but only enough to see what the program is doing, not enough to write from scratch.

Jeremy Flint (http://www.jeremyflint.com)

#3

I have tried it before and it really didn't appeal to me, although JC may kill me for thinking that way. But that was a while ago so I might give it a once over again.

Scrivs (http://www.9rules.com/whitespace/)

#4

  • Ruby
  • Clone this (and make it open source!)
  • How about here (Or go straight to the source.)
  • JP (http://freetheslaves.net)

    #5

    I see the seeds of a "which language is best" argument here...

    Anyway, it depends on what you're looking to achieve. Are you looking to develop for web/CGI, or the desktop?

    If the former, I would have to say that Perl is the most flexible, easy to learn (especially as you already know some PHP) and powerful language around. Combine it with "mod_perl" (perl.apache.org) and you have one of the best web-app rapid development environments you could wish for.

    If you want high-performance web-apps, use C. (You can use your C apps within a Perl framework too).

    This is what I have done with the Urban Mainframe: the CMS is written in Perl; the CPU-hogs (image processing, searching, caching, etc) are all written in C and then accessed via their API's with Perl.

    If you are programming for the desktop, then again I'd recommend C.

    If you really want a challenge, try assembler.

    DarkBlue (http://urbanmainframe.com/)

    #6

    Check out Servlets/JSP! I've been using it at work for a little over a year, and I love it. It allows for a very clear separation of business logic and presentation, and can make for some very clean code (if you're into that sort of thing). The other languages are fine, but JSP's are worth checking out.

    Kevin (http://lawver.net)

    #7

    Python!

    Kevin Francis (http://denial.loose-screws.com/)

    #8

    Python?

    Simon Willison seems to dig it.

    Reid (http://www.reiddurbin.com/)

    #9

    Well, since you're trying to build a brand - and your posts / sites primarily concern css techniques - why not go for something like building a better css validator?

    Mark Fusco (http://www.lightpierce.com/ltshdw)

    #10

    I'll second Kevin's "Python!" It's just that good.
    A great online resource would be mark pilgrim's diveintopython.org

    But if you want something slightly esoteric (as in so different to be actually interesting), pythonic, and web-oriented, try making sense out of Zope. it's a really clever concept. you can get started with the zope book. other than this, the docs kind of suck.

    I don't know what project you'd work on with these. Just about anything.

    A more project-oriented suggestion: how about sharpening your javascript, learning XUL, and extending Firefox?

    I'll have to disrecommend Coldfusion, because it's buggy, slow and bloated, and yes, I'm using the latest version and have been using it since 4.5.

    Caio Chassot (http://v2studio.com/k)

    #11

    Ruby, if you want an inutive, easy-to-pick-up OO language. It has better OO semantics than Perl or Python, excellent Web deveopment tools , and a friendly, open community.

    If you want something outside the OO word, consider Haskell or OCaml.

    James Britt (http://www.jamesbritt.com)

    #12

    Nah, I won't kill you. But if you want a rapid web development language, CF is king. It's pretty quick to pick up, looks good on your resume if you ever decide to go to a corporate setting, and with the new version, it plays very nice with enterprise java. Can't vouch for that one, though, we haven't upgraded yet.

    Ciao, I have no idea what you're talking about. We use CF extensively, and it's extremely fast both in terms of development and in terms of code execution, even on our clunky P2-350 intranet server. Bloated... I honestly don't see what it matters, if that's the case. It doesn't take up all that much space or memory, and it performs wonderfully. As for buggy... the only bugs I've ever run across in coldfusion are the CFFORM functions, especially CFGRID in CF version 5, which required a specific JRE in Netscape (rather than 1.x +, it required specifically 1.x.x.x). Even with that, CFGRID is incredibly useful, especially when you want to dump out a database table, modify it, and update it all at once. CFStudio on the other hand, was "Mister Memory Leak" and I only use it on occasion now, for the two features they didn't port over to Dreamweaver MX -- code collapse (which was great for finding mismatched braces or cfifs) and the documentation (which sorta exists in MX, but forces it into something the size of a business card which has copy and paste disabled)

    Anyway....

    Alternatively, Paul, you might try learning XSL. It's becoming more widely used and it's nothing like anything else out there so while you won't be able to extrapolate solutions easily from other languages you know, it won't confuse your usage of other languages by having similar commands.

    Or COBOL. It's not even remotely web related, but it'll guarantee you a good paying lifetime career... since cobol apps aren't going away, but cobol programmers are retiring and dying off and there aren't many new ones coming in to take their place. I wouldn't recommend it though... I don't think you have the right (factory-workeresque) mindset.

    JC (http://thelionsweb.com/weblog)

    #13

    I'd recommend Python.

    Matt (http://photomatt.net/)

    #14

    Here's another vote for Python. Seems to meet many users at their, erm, point of "go". If you're doing C#, the Python for .Net stuff might be interesting. http://zope.org/Members/Brian/PythonNet/ , Jython for Java. Notes on batteries-included, comp. sci idiom pepperings and fundamental datatypes ommited for brevity.

    Exception: Ruby seems to be more pallatable to those who have a more un*x/shell-scripting/Perl background.

    Zope and Plone are nifty, but don't let that learning curve drive you from Python's "45 degree" learning curve.

    DeanG (http://sqr.pycs.net)

    #15

    Hmm. No one's mentioned Java yet. JSP and servlets are a subset of that. (And they'll both drive you nuts after using PHP... JSP is sooo clunky compared to PHP)

    Python might be fun. I just never see people looking to hire python coders, or places that have python environments and don't support PHP.

    Really, Paul, the language to play with depends on what sort of a programming project you want to do. What are you in the mood for?

    JC (http://thelionsweb.com/weblog)

    #16

    I have to also vote for python. Pick up an O'Reilly book, learn it's coolness in an afternoon and find things that surprise you for the rest of your life. That or Lua, which is along the lines of Ruby, but is coming into its own as well.

    Then again, you could go old school and break out qbasic.

    Jay (http://sixdays.midsun.com)

    #17

    I'm learning COBOL, assembler and Java in college and I wouldn't recommend the first 2 unless you're a masochist ;)

    Bart N. (http://Percept.be)

    #18

    I always liked PERL. I am thinking about getting back into PERL in my spare time as I have been doing ColdFusion at work now for over a year. ColdFusion is similar enough to PHP where I don't recommend that you use it if you are looking for something different.


    Jason

    #19

    Well it definitely has to be web based and use XML extensively throughout for its use of manipulating data. I am thinking maybe a project management type tool or something along those lines to keep track of my crazy ideas. An idea tracker maybe.

    Scrivs (http://www.9rules.com/whitespace/)

    #20

    Try building a web service from scratch. Maybe make on for the Roe store...

    dr.u

    #21

    Python. It's useful in a web design context (unlike Java or C) but is more powerful than Javascript or PHP - it also interacts well with other languages and works well as a learning language because of the simple syntax.

    Bryant Cutler

    #22

    Don't you have to have a special server to serve ColdFusion?

    Why go with that when you can do PHP/PERL/etc. with just about any hosting service?

    Jeremy Flint (http://www.jeremyflint.com)

    #23

    I've never been too attached to any language; whatever most easily gets the job done is fine with me.

    I would simply recommend, if you haven't already, that you learn something object-oriented. Once you get the hang of it, it will probably change your entire way of thinking about code. An invaluable reference to OOP is here:
    http://www.phppatterns.com/

    Yes, it's PHP, but I think the concepts are easily transferrable.

    Chris Vincent (http://dris.dyndns.org:8080/)

    #24

    Jeremy -
    No, not any more than you need a 'special server' to run PHP or PERL. ColdFusion is an application server that can be installed on the webserver PC (or on a remote one--I've never seen it on a remote PC, so not sure how that works). The primary difference for most people is that CF is not free like PHP is. The developer version is free, and lets a couple IPs connect to it IIRC, but the production server is fairly expensive for professional and quite expensive for enterprise. But there are lots of web hosts that offer it inexpensively, even some free ones (though they usually limit your DB usage to Access on the free ones).

    Paul -
    Why not start with what I suggested the other day? Build a weather thing using XSLT and weather.com's dev kit. Not precisely a programming language, but useful. And then try doing something totally different in $languageOfChoice

    JC (http://thelionsweb.com/weblog)

    #25

    Hi I use coldfusion on both of my sites, primarily gamecubecheats.info, but it was definitly easier to learn then what I am trying to right now, asp. Its nice because its tag based and none of this

    Bryan (http://www.gamecubecheats.info)

    #26

    Well, it really depends on the project... I mean, each language has it's pros and cons... it depends on what you are trying to do in order to choose the best language for that project.

    With that said, I'd look into these:
    PERL / Mod_PERL
    Mason / Template Toolkit
    JSP / JHTML
    Java / J2EE
    ASP / ASP.Net
    Python
    Ruby

    Other technologies of interest may be:
    XSLT
    XML
    Zope
    SOAP

    I would avoid like the plague:
    Visual...anything
    ColdFusion


    Nick (http://www.digital-web.com)

    #27

    XSLT is the freakin' wave of the future.

    Get on that bad boy, and ride it into the sunset.

    Mike (http://phark.typepad.com)

    #28

    JC, not to turn this post into a cf bashing discussion, but here are a few interesting issues with cfmx http://www.dialoguedesigns.co.uk/dc2/page.cfm?pageid=cfmxproblems

    the encoding issue with mysql was especially boring and delayed a site launch in almost a week.

    Caio Chassot (http://v2studio.com/k)

    #29

    Looks like I will have to do some research on Ruby and Python and decide from those two. Thanks for everyone's help so far. Didn't realize I had so many programming types here.

    Scrivs (http://www.9rules.com/whitespace/)

    #30

    Thanks, Ciao. Those are all annoyances if they apply to you, but wouldn't affect us except for the looping thing which was fixed in 6.1. And we don't use MySQL, so that's not an issue.

    But definitely we'll need to do some more research before upgrading our intranet server from 5 to MX. The external websites will stay on 4.5 because they don't need any of the newer features and it's damned expensive to upgrade multiprocessor load balanced machines running CF enterprise.

    I still say CF is an excellent language to learn. You can use it to do pretty much anything a normal dynamic website needs, much faster than you could in any other language. 4.5 and 5, at least, get less useful when you start trying to do complex things (when manipulating strings in an unusual manner, you have to write a lot of regexes for things that PHP has built-in functions for, for example), but you can often find custom tags for specialized tasks of this sort. And with MX, I suppose you can use inline java or something.

    JC (http://thelionsweb.com/weblog)

    #31

    Hey Mike... XSLT may be the wave of the future, but the wave of the future is a royal pain in the arse. :-)
    I particularly enjoy the excellent implementation of else-if (no such thing) and the descriptive error messages (AFAIK there aren't any)
    Oh, and I love the "ok, here's how you output data. Oh, unless it's inside an HTML tag or something, then we need to do it in this totally different and wholly unrelated manner."

    I might like it better if I knew it better, but I can guarantee I'd like it better if it had some of the same basic concepts that other languages have.

    But despite my distaste for it, it's a very valuable language to learn, and I'm stuck using it with websphere even if it wasn't. :-)

    JC (http://thelionsweb.com/weblog)

    #32

    if you're talking about web stuff, than i'm adding another vote to python. i love it. everyone loves it.

    on the other hand, if you're talking about developing desktop applications, you can't go wrong with good ol' c++.

    vlad (http://vlad.neosurge.net/)

    #33

    JC, the point is that cfmx is unpolished, and unpolished apps can always surprise you with nasty bugs. Other than that I feel cf encourages spaghetti code, and dificults code reuse. Also, while it makes it extremely easy to get yourself started and do quick things or small sites, it's unmaintainable for large projects. Anyway, I see that you're working with 4.5. This version, while limited (no UDFs, regex support is lousy), is pretty solid and stable. MX is my real problem. But enough about CF.

    Python coders, what do you use beyond cgi to deploy web apps in python? I'm playing with webware, and my next project will be trying to integrate simpletal with it. I like zope, but there are many small things that bother me about it, bad documentation being the big issue. What are your experiences?

    Caio Chassot (http://v2studio.com/k)

    #34

    Ciao - Try fusebox. Code reuse is excellent. Not sure how 4 works, it doesn't support pre-mx versions, but we use 3 extensively. (and I use it for php, also, actually)

    JC (http://thelionsweb.com/weblog)

    #35

    No else-if?

    What about <xsl:choose>, <xsl:when>, and <xsl:otherwise>? ;)

    I agree, it is still in its infancy as far as implementation and support goes, but it has some potential.

    Mike (http://phark.typepad.com)

    #36

    ASP is the devil. Nothin' like relying on a proprietary technology that only runs reliably on an expensive web server app.

    Same with C# — Microsoft's version of Java. They realized Java's potential, and cashed in by changing some stuff and rebranding it.

    "Oh my god! Wait a sec, what about all that .NET niftyness that you need Visual Studio.NET for?"

    Java's got that too. Its called XML-RPC, WSDL, SOAP, etc. Ever heard of them? They're free.

    Moving to proprietary technologies will only bottleneck your creativity in the long run.

    Mike (http://phark.typepad.com)

    #37

    Choose when and otherwise work, but they're not identical in function to an if/elseif IIRC. I don't remember what I was trying to do precisely that I couldn't do either way and had to futz around with nested ifs on... something to do with checking for things that had nothing to do with each other I think. it's been a month or two.

    JC (http://thelionsweb.com/weblog)

    #38

    Moving to proprietary technologies will only bottleneck your creativity in the long run.

    And excluding a technology just because it’s proprietary is a pretty narrow-minded move.

    Vinnie Garcia (http://blog.vinniegarcia.com/)

    #39

    If you're trying to increase the value of your company, I'd 100% recommend building and focusing on the skills you have, rather than diversifying.

    If however, you're trying to increase our employability in the corporate sector, then you need to look at either what's hot now (what all those job ads ask for -- in Australia, it seems to be ASP.NET, Java and OO PHP), or what's just around the corner as "the next big thing" (XML, XSLT, Ruby, Python?)

    Justin French (http://indent.com.au)

    #40

    mmm... ASP doesn't rely on an expensive web server app, last I checked.... Well, if you want to do it on linux you need to shell out a couple hundred bucks for chilisoft or instantASP(whatever they're called at the moment), but all ASP needs if you're using a windows server is IIS.

    And well said, Vinnie. Choose technologies based on what works best for what you want to do in your given environment, with your given (or potential) skill set. Not because you're an MS junkie or an open source junkie. (Or a mac zealot. I'd hate to leave them out.)

    JC (http://thelionsweb.com/weblog)

    #41

    One language worth mentioning that no one's said yet... ActionScript. Since MM is positioning flash as an upcoming platform for the creation of web based applications, rather than cheezy 'skip intro' things, it might be good to pick up. :-)
    You can do some damned cool things with it.

    JC (http://thelionsweb.com/weblog)

    #42

    The newest version of ActionScript is pretty much Javascript 1.5, so knowing either one will put you in good shape to work with the other.

    Licensing Windows w/IIS server will always cost more than a LAMP installation ;)

    I'm still going to disagree about proprietary technologies though, its just the way I've been thinking about this IT stuff as of late.

    The ultimate goal is interoperability — your data, with anyone's apps, on anyone's server, without a lot of fuss. Scalable, flexible, and completely movable.

    That's the goal with XML-defined data. Store it anywhere on any database, export data to XML, translate and move the data around using XSLT, and then distribute that form of the information to any device you wish. That kind of workflow is extremely powerful, but companies like Microsoft want to pidgeonhole you into certain technologies (ASP, .NET, etc.) so that they still dominate the marketplace.

    They only care about the bottom line; not the process, software, the data, or the consumer.

    It is still all about choice, however. If your entire web application is driven by Flash, then hell, go with ColdFusion, I'm sure it is a better hook than other server-side technologies. Small- to medium-sized database? Go with mySQL and PHP. Want a free, proven, and powerful web server? Go with Apache.

    Why spend the extra money when you don't have to? Why limit yourself to what companies think you should use? Let your data and needs determine what software you use, not the other way around.

    Mike (http://phark.typepad.com)

    #43

    well, that depends on whether you're building the server yourself or buying it from a vendor like dell. the server OS is a minimal part of the price. In my organization, the cost of linux would be ridiculous because while a few of our techs like it and play with it, we don't have anyone who is at a comparably high level to our MS admins (we don't screw around with paper MCSEs) and Novell admins.
    for my personal stuff, and for most of the clients in my little business on the side, I use linux/apache, and php/mysql where needed. It's more flexible for what I want to do, and it keeps my skills on that side of the fence up a bit.
    And something doesn't have to be open to use xml... hell, MS was one of the big promoters of XML in the first place IIRC. I've used xml/xslt a very little with CF (I did have to install a CFX for it, CF 4.5 only supports Allaire's flavor of wddx by default), and quite a bit now with websphere, and I'm finding that there are lots of very clever things you can do with it, but xsl's weak points are frustrating... so be careful promoting it or I might email you next time I get frustrated. :-)

    Anyway, I basically agree with you, I just don't consider cost or open vs closed source to be such a big factor.
    Obviously, you have to work within your resources, but if you're corporate, the moderate cost of server licenses isn't an issue, the rest is (mostly) politics.

    JC (http://http;//www.thelionsweb.com/weblog)

    #44

    XSLT is definitely worth learning. Check out Dave Pawson's site for huge quantities of goodies, or if you want hardcopy to squash spiders with, Michael Kay's XSLT Programmer's Reference Second Edition seems to be good value (I'm still relatively young, which means I haven't read all of it yet).

    However, to truly grok XSLT in all its fullness, I think you need to first learn Prolog. As well as showing you a totally new way of doing things, it will give you a new insight into two very deep and crufty concepts: C++ templates and Perl 6's multimethods. Basically, a fully capable C++ compiler with template handling is now a Prolog interpreter, almost by accident; and the multimethods in Perl 6 could conceivably be extended to implement Perl-style unification. Prolog is an excellent tool to have in your belt, and it makes XSLT much easier to work out.

    Eric TF Bat (http://flurf.net)

    #45

    Well since the language aspect has been discussed pretty well, not too many ideas have been coming in regards to an actual project to start. Yes JC, I saw the Weather.com feed and I will get to that eventually ;)

    Scrivs (http://www.9rules.com/whitespace/)

    #46

    better start another thread for the project bit. heh.

    JC (http://thelionsweb.com/weblog)

    #47

    Learn Lisp, then Tcl, then Python. In that order.

    Michel (http://www.soveran.org)

    #48

    in terms of projects... do you have a good CD collection, or a lot of books? maybe write something to track those... or if you have an ipod, maybe write something that'll interface with itunes playlists. Maybe you could do something like Keith has on his site.

    JC (http://thelionsweb.com/weblog)

    Keep track of comments to all entries with the Comments Feed