Massassi Forums Logo

This is the static archive of the Massassi Forums. The forums are closed indefinitely. Thanks for all the memories!

You can also download Super Old Archived Message Boards from when Massassi first started.

"View" counts are as of the day the forums were archived, and will no longer increase.

ForumsDiscussion Forum → Programming
Programming
2010-01-23, 10:13 AM #1
To make a long story short, I would like to get back in to programming but have been out of the game for several years. I'm looking for some advice on what direction to take as far as suggestions for languages, predictions, software, etc. I'm mostly interested in web-based programming. Keep in mind that this is mostly going to be a hobby for me but I want to work with something that could potentially lead to a career in the future, if needed. I have a little C/C++ & Java experience from college, although a bit dated. I've been toying around with Ruby & Ruby on Rails lately but I find that server configuration is a nightmare. Should I tough it out with Ruby/RoR or is there something else out there that I would be better served by learning? Thanks!
? :)
2010-01-23, 10:56 AM #2
Seattle area, the jobs are mostly java or .NET. There are a few php jobs but you're competing with everyone, and they generally get frustrated going through 800 candidates and never getting beyond script kiddies, so they start requiring a cs degree simply to look at your resume. I do perl professionally and I've never had a problem finding work, but that's because I seem to do well at interviews and my resume has tons of experience on it. Generally I see about 1 perl/mod_perl job per week. I see dozens if not scores of java jobs (simply because amazon is up here and they want everyone to do java nowadays). .NET is popular around here because it's a microsoft area.

Ruby on Rails, I see about a job a month or so. I interviewed for one that was mostly perl with a smattering of ruby on rails and the interviewer was a complete *** -- basically expecting me to find/write a framework for perl that works just like rails. Um right.
2010-01-23, 11:58 AM #3
I'm a fulltime RoR developer, at the moment. Haven't really seen many RoR jobs -- I was a java dev then got switched to a team that did RoR.
2010-01-23, 12:36 PM #4
Originally posted by Brian:
Ruby on Rails, I see about a job a month or so. I interviewed for one that was mostly perl with a smattering of ruby on rails and the interviewer was a complete *** -- basically expecting me to find/write a framework for perl that works just like rails. Um right.


Catalyst?

Anyway, I used Ruby on Rails for a while and wasn't particularly enamoured with it. I like Ruby as a language, and Rails is light years ahead of anything in the Java world (which I used before), but the framework changes too rapidly (in backwards incompatible ways) and has too much magic going on. I've been using Django (a Python framework) at work for the last 2 years and haven't looked back.

Django isn't perfect (I have plenty of gripes with it), but it's the closest I've found to a tidy abstraction on top of http, rather than trying to hide it completely. Its form handling library is very nice too.
Detty. Professional Expert.
Flickr Twitter
2010-01-23, 2:00 PM #5
Catalyst is a nightmare. I've used it for a small project, and it seems to work okay, but you're limited to this little box, which, at first glance, looks really big and complicated, but when you get down to the essence, it's still a little box.

I generally pick and choose modules from CPAN depending on the project. I'm a fan of CGI::Application because it's really lightweight, easily extensible, and non-opinionated.
2010-01-23, 2:05 PM #6
Stick to excellent steak, hollandaise sauce and getting your restaurant on the go :P

(no really, why waste time on this when an adventure like that one lurks? ;) )
2010-01-23, 2:15 PM #7
With regards to the questions of the original post, which I kind of didn't answer, you'll get the most value out of learning something transferable. Frameworks come and go, Rails is currently the biggest non-enterprise framework but changes very quickly (too quickly) and tries to disguise how the internet actually works (not a lot, certainly not as badly as enterprisey frameworks do).

You'll get the most benefit out of something that gives you direct access to the concept of request and response objects, RESTful URL design and form handling that follows best-practices. Things like the ORM (database stuff) are always nice, but they don't really teach you anything about the web - especially when the second you hit any kind of scale you'll be putting another layer in between the database and your app, or just handwriting all your SQL (depending on requirements).

There are frameworks better than Django for this, but they tend to be very low level. Django is the best compromise I've found - it lets you get things done (very quickly) but doesn't give you some kind of horrendous abstraction. The process by which a web request is mapped to a function which returns a response is very intuitive and I've learnt a lot more about building decent web apps using Django than I did in the previous 8 or so years of messing around with PHP, Java or Rails.
Detty. Professional Expert.
Flickr Twitter
2010-01-23, 2:22 PM #8
Originally posted by Mentat:
Keep in mind that this is mostly going to be a hobby for me but I want to work with something that could potentially lead to a career in the future, if needed.

C# and .NET are worth looking at. They're very easy to learn and fun to play with because everything "just works." .NET is here to stay and is a very marketable skill to have when it comes to jobs.

If you want to do web development with .NET, I suggest using the MVC framework. It's newer and much less marketable than regular ASP.NET (so far) but it's also loads better. If you are finding configuration with Rails or others to be difficult, I suggest using .NET. To get started with a web application, you just make a new project in Visual Studio and you can immediately press F5 to run the application with the built-in development server.

If you don't want to pay for or get Visual Studio, the express editions are free.
Bassoon, n. A brazen instrument into which a fool blows out his brains.
2010-01-23, 2:30 PM #9
Quote:
no really, why waste time on this when an adventure like that one lurks?

We're still hard at work planning for the restaurant but until I find another job I have way too much time on my hands. This will give me something to do as a hobby in-between reading my restaurant management books (this ****er is huge) & working on recipes.
? :)
2010-01-23, 2:31 PM #10
I don't know much about web development, but C# is about as close to 'fun' as a programming language gets.

Well... C++ is pretty damn fun too, but for terrible reasons.
2010-01-23, 2:31 PM #11
Originally posted by Detty:
especially when the second you hit any kind of scale you'll be putting another layer in between the database and your app, or just handwriting all your SQL (depending on requirements).

It's easier and smarter to just invest in higher server capacity than compromising on design. Although I haven't used them, a lot of people swear by code generating "ORMs" like Subsonic, or "enterprise" ORMs like Hibernate. As an interesting anecdote, Stackoverflow.com runs on LINQ to SQL, which is quite frankly a bad and slow ORM, and does fine with a very high volume of traffic.
Bassoon, n. A brazen instrument into which a fool blows out his brains.
2010-01-23, 2:33 PM #12
Originally posted by Jon`C:
Well... C++ is pretty damn fun too, but for terrible reasons.

C++ is fun the way a crossword puzzle designed by a schizophrenic is fun.
Bassoon, n. A brazen instrument into which a fool blows out his brains.
2010-01-23, 2:47 PM #13
Originally posted by Emon:
It's easier and smarter to just invest in higher server capacity than compromising on design. Although I haven't used them, a lot of people swear by code generating "ORMs" like Subsonic, or "enterprise" ORMs like Hibernate. As an interesting anecdote, Stackoverflow.com runs on LINQ to SQL, which is quite frankly a bad and slow ORM, and does fine with a very high volume of traffic.


Who said anything about compromising on design? I think talking to the database all the time is totally flawed. The average web server these days has ridiculous amounts of RAM, more than enough to say store 50,000 e-commerce products entirely in memory. So why do we keep insisting on using databases so heavily when a long-running process (which is what Rails, Django and most enterprise solutions are) make much faster designs possible? Sure, you have to worry about keeping your in-memory structures consistant with the database, but this is no more difficult than a decent caching strategy (which is kind of what this is anyway, but more tailored to the design of your app).

1 million visitors a day is still only 11 visits per second, which any website should really be able deal with regardless of what ORM or caching strategy you use. But my interest is really in architectures that allow faster responses full stop, so perhaps I shouldn't have thrown the 'scale' word into the mix which only confuses matters.
Detty. Professional Expert.
Flickr Twitter
2010-01-23, 3:08 PM #14
Originally posted by Emon:
C++ is fun the way a crossword puzzle designed by a schizophrenic is fun.
That's not really fair. C++ is the only programming language that supports real generic programming.
2010-01-23, 3:32 PM #15
Originally posted by Detty:
So why do we keep insisting on using databases so heavily when a long-running process (which is what Rails, Django and most enterprise solutions are) make much faster designs possible?.

Because the designers are retards and don't invest in any caching layer that store frequently accessed database objects. Just by adding a caching layer, I was able to speed up one of our apps quite noticeably. However, adding said caching layer was a *****...still is because the application does NOT scale at all. I'm not using a hyperbole here. It can't be scaled. You either throw more hardware upgrades on the server or you rewrite the thing from scratch. It is so God-awfully written and hacked up.

Re LINQ-to-SQL: It's still million times faster than the Entity Framework and 2 million times more complete. The EF awful. Microsoft really bricked hardcore on EF. How bad? Translate this SQL into Entity Framework?
Code:
SELECT    do.stuff,
    di.moreStuff
FROM    Dongs do
JOIN    Dings_Dongs dd
    ON    do.key = dd.key
JOIN    Dings di
    ON    dd.key = di.key
WHERE    di.col = 42

Come back when you have given up or you can't take bashing your head anymore.

Re C#/.NET: I agree with Emon and Jon`C. C# is by far the "funnest" language I've written in. It really takes out the nuances and pedantry of other languages. Plus, Visual Studio is one of the best IDEs I've used. I don't really want to write in anything else.
Code to the left of him, code to the right of him, code in front of him compil'd and thundered. Programm'd at with shot and $SHELL. Boldly he typed and well. Into the jaws of C. Into the mouth of PERL. Debug'd the 0x258.
2010-01-23, 5:02 PM #16
Mentat, if your doing this for a hobby, to build websites for yourself, friends or whatever. Learn PHP, it will be plenty powerful enough. Setting up a server is easy on any platform, and there are plenty of tutorials, books, other resources to help you along the way.
"Nulla tenaci invia est via"
2010-01-23, 6:03 PM #17
I do PHP and C# on the side, but I don't have any serious intention of paid work unless something I happens to fall in my lap from a friend back home.
$do || ! $do ; try
try: command not found
Ye Olde Galactic Empire Mission Editor (X-wing, TIE, XvT/BoP, XWA)
2010-01-23, 6:07 PM #18
Originally posted by Detty:
But my interest is really in architectures that allow faster responses full stop, so perhaps I shouldn't have thrown the 'scale' word into the mix which only confuses matters.

Okay, I see what you mean. I thought you meant that ORMs weren't fast enough or didn't generate good enough SQL to use on large, high volume sites.

I'm of the opinion that for most things, relational databases are garbage and object databases are much better. I don't care if relational is usually faster, storing links between data makes so much more sense with an object graph than having to index keys and do joins and all that crap.
Bassoon, n. A brazen instrument into which a fool blows out his brains.
2010-01-23, 6:14 PM #19
I get to learn Assembly this semester. Although technically Assembly isn't a language per se.
2010-01-23, 10:02 PM #20
Quote:
That's not really fair. C++ is the only programming language that supports real generic programming.


It amazes me how little need I've had for it since I've been working in C#.
2010-01-23, 11:10 PM #21
I am not sure I would call C# "fun" (probably because I had to use C# 2.0 to write a genetic algorithm for a project at work, even though the rest of the world had already moved on to 3.0, but I digress), but I definitely like it more than Java. Compared to C#, Java's language and libraries really seem to be stagnating.
[This message has been edited. Deal with it.]
2010-01-24, 5:29 AM #22
Originally posted by Jon`C:
That's not really fair. C++ is the only programming language that supports real generic programming.


Out of curiosity, how are Java generics not real generic programming?
the idiot is the person who follows the idiot and your not following me your insulting me your following the path of a idiot so that makes you the idiot - LC Tusken
2010-01-24, 11:09 AM #23
Originally posted by Wolfy:
Out of curiosity, how are Java generics not real generic programming?
The easiest explanation is that C++ templates are Turing-complete, and Java generics are not.

Java's "Container of X" pattern is a subset of generic programming at best - with type erasure I'm more inclined to call it the "container of... whatever man, I don't even ****ing care anymore" pattern. C++ lets you do more. A lot more.
2010-01-24, 9:45 PM #24
Originally posted by Jon`C:
That's not really fair. C++ is the only programming language that supports real generic programming.

What about templates in D?

Originally posted by Wolfy:
Out of curiosity, how are Java generics not real generic programming?

They're just syntactic sugar for boxing and casting. Generics in C# are at least supported by the runtime, and as of version 4.0 support covariance and contravariance.

Try this in Java, it won't work:

Code:
void m()
{
    List<Bar> list = new List<Bar>();
    foo(list);
}

void foo(List<Object> list)
{
    // ...
}
It cannot infer that List<Bar> is a valid argument for List<Object>, despite the fact that it obviously is. C# 4.0 doesn't have this problem, and C++ never has.

Another problem is trying to do generic programming with primitive types. Imagine you're writing a vector class, and you want it to be generic so that you can have Vector<int>, Vector<double>, Vector<float>, etc. Java and C# won't let you do this, because you can't apply mathematical operators to primitive types. It would probably work if all the primitives inherited from a single type, say "Numeric" that defined mathematical operators. But in C++ that never would have been an issue because it's a compile-time substitution.

These are just a few examples that I can think of.
Bassoon, n. A brazen instrument into which a fool blows out his brains.
2010-01-24, 9:54 PM #25
Originally posted by Emon:
What about templates in D?
That's true, I'd forgotten about D.

How is D these days, anyway? I'm always tempted to learn more about it but I don't know if the tools are really there yet.
2010-01-24, 9:59 PM #26
I haven't looked at it recently. Code::Blocks provides a reasonably good IDE, but I don't think the Tango vs Phobos thing is really resolved yet. By that I mean there seem to be a lot of libraries and projects that use one or the other, and they are not compatible with each other. Maybe D 2.0 will provide some sameness to things.

D provides so many high level features with the performance profile and power of C++. I wish it were more mature.
Bassoon, n. A brazen instrument into which a fool blows out his brains.

↑ Up to the top!