It depends very heavily on what you want to do. Even what operating system you intend to work with makes a tremendous impact on what the skillset should be. For instance, I'm a Unix programmer, and any experienced Unix programmer really should know C--even if it's not the actual language you'll spend most of your time with, C knowledge goes a long way on Unix. I personally find plenty of work in C, but then I believe that the fact that I'm rounded out with knowledge of several other useful languages does a lot for my chances in comparison with other candidates.
I've avoided Windows work where I can (it's just not my thing), so take my advice about it with a pound of salt, but my impression is that C# is a very good language to know right now. C# is really quite similar to Java, and so a lot of knowledge from one will transfer to the other (the chief differences may not be in the languages themselves, but between.NET and the Java Class Library). Knowing a little C++ and a solid understanding of using it in a Microsoft environment (which is perhaps more important than knowing C++ solidly for many jobs), will go a long way toward bringing you ahead of other C# candidates that don't have much C++; there are many limits to what you can accomplish in the real world with.NET alone.
I don't really enjoy working with Java, but I think it'll be a long time before Java programmers start running out of work. Writing phone apps seems like a pretty easy job to get with Java.
My personal creed is to learn the languages and technologies I want to know; I usually give little thought to how useful it will actually be for my career. That philosophy is admittedly somewhat naïve, and would absolutely need to be adjusted in a truly awful job climate; but it has worked well for me so far. I think I tend to snag jobs in which I'm happier, since I'm working with technologies I like (note, though, that in the larger picture, comfort with the technology really plays a very minor role in total job satisfaction).
There's a limit, though, to how well this can work for you. Several languages I've got good understanding of, such as PostScript or Haskell, I have no illusions of applying any time soon in a job. Similarly, I expect that knowing Fortran these days may have limited practical usefulness, especially when those jobs that do require Fortran can probably find much more experienced folks than a college grad. (However, you may find that familiarity with m4 is at least occasionally useful, and more so if you work in a Unix environment that depends on autoconf and the like).
The State monad is absolutely not "mutable variables". It's a mechanism for successive transformations of a state value, which is pure functional programming defined.
In my 20 years of development experience, I think nothing is so valuable as writing discrete pieces of functionality wholly separate, hiding the implementation details from the interface. Always write code as if you'll have to completely replace it (you probably will at some point), with an eye to making that as painless as possible (IOW, you won't have to change other code just because you changed this chunk).
I'd also recommend checking out the Test-Driven Development paradigm, which ensures you have complete test coverage for every line of code you write. It's not a panacea, but it really provides confidence that your code is correct, and makes it easy to ensure past mistakes are not repeated. I'm an extremely careful coder, and it still does wonders for my code quality, and often also my productivity/efficiency.
you need to understand a rigorous mathematical construct in order to write a "Hello World" program.
Um... main = putStrLn "Hello World". And you don't have to understand the gory details of how Monads work in order to use them in a do-expression. It's a useful thing for a mature Haskell programmer to know (or, like me, a new but thorough learner), but hardly required.
That a language has "functional aspects" doesn't make the language itself "functional". By the same reasoning you use, Python is a "functional language" too. Hell, even Perl has closures and lambda. And Python has list comprehensions and such. Pretty much every high-level language has these things; that doesn't make them functional.
This is only true for specific implementations. The Haskell 98 report only specifies library support for textual input/output, and is completely useless for portably handling Binary IO. That everyone just uses GHC anyway, which has great support for Binary IO, doesn't negate the point that Haskell itself sucks when it comes to IO.
Other serious shortcomings would have to include lack of proper locale/encoding support (characters are read in as Unicode values; but what is the original encoding assumed to be, then? Current implementations do byte-for-byte, which also isn't great), and lack of serious exception-handling (though that is probably mitigated considerably by the Maybe monad in combination with "do").
Haskell is a gorgeous language, but it does have some serious shortcomings, at least when it comes to the official specification as opposed to popular implementations. GHC has done much in making it a truly useful language, and so most people mean GHC when they say "Haskell". Which is plenty portable enough, I guess, considering that it is capable of using GCC as the compiler backend.
JavaScript is decidedly not a functional language. It's a language that "functions", maybe that's what you meant. "Functional programming language" means something else entirely, though.
The surprisingly awesome shareware game. Large and detailed. And the demo can play for like two hours, so you get a pretty good idea of whether you'll like the game or not.
It's an underwater fantasy action-adventure game. See videos here.
Programs don't read/etc/passwd to get passwords (nobody stores 'em in there any more), they read/etc/passwd to map between user ids and user names. Chalk this up to the most overhyped nothing I've seen posted to/. for a while...
A terrific way to get involved in the community is to simply take on the attitude that, whenever you encounter a problem or annoyance in software that you use and care about, you will take responsibility for fixing it. This is, in fact, how I have recently gotten involved in several FLOSS projects in the last year and a half.
Every time you encounter a bug, feel free to report it, but also, investigate it. Is it crashing? Whip out the debugger (and recompile from source, if necessary, to get debugging symbols). Some annoyance? Look at the code logic, and write up a patch, including it with your report to the developers.
This is not only a great way to get involved in FLOSS projects; it's also a terrific way to learn about the software you use, and further your education as a software developer.
A small clarification. Some people seem to think I said that the article doesn't take folding into account. I never claimed this.
What I did claim is that it assumes such folding doesn't happen until it's mathematically impossible for it not to happen. Perhaps I misread something, but this does seem to be the case.
Someone else pointed out that ancestry doesn't quite coincide with genetics. Right: my bad.
The thing is, it just doesn't seem like they were all that careful in their analysis; they didn't explore other possible reasons for the results they were seeing, and (as I said previously) they seem to assume an equal likelihood for ancestry across the entire spectrum of available humans for the time period, which is clearly untrue.
The math only works if you assume that the ancestry never coincides with itself until it is mathematically impossible for it not to do so. This is ludicrous. Ancestry will coincide many, many times before that point. It is easy to demonstrate mathematically that it is more than possible for an ancestry to fold in on itself repeatedly, without touching other distinct lines.
The basic assumption (flawed), is that having trillions of "ancestors" means that it fold in across the entire spectrum of living people at a given time, when it can in fact fold in multiple times on a selection of that population; or that having any particular person as your ancestor is almost precisely as likely as any other arbitrary person. Historically, there are many social constrictions to make such statistics highly unlikely.
It also seems obvious to me, that were interracial marriages so common place so long ago (across the last few thousand years, even), the world would not be quite as genetically diverse a place as it currently is.
Disclaimer: IANAM(athematician). However, I do love math, and this seems like a fairly obvious and very easily provable flaw.
I'm also probably misusing the phrase "fold in" above, though: but I imagine everyone can understand what I mean by that.
Sounds like a job for Hari Seldon's Time Vault, to me....just build a machine too complex to analyze from without, and which will destroy itself if tampered with...
What apparently doesn't occur to you, is that there are people in this world who actually code for fun, and not only when they have a massive project due.
There are some of us who would much prefer bringing a laptop to code on during a long wait over twiddling our fingers.
'Course, a good technical book is perfectly adequate as well. But if you're in the midst of something fun, you're not gonna let something like a little movie stop you.
Not that it really matters, but the universal network in "Serial Experiments: Lain" was called "the Wired"; Navi (short for Navigator?) was what they called the computer used to access the Wired.
Also, VoIP wouldn't be quite the same thing as the Wired, where everyone also represented themselves with virtual effigees (sp?), much like some 3D chatrooms, or the world in Neal Stephenson's "Snow Crash".
I'm still experimenting in trying to find the optimal conditions, but I at least note that the Zone differs very greatly depending on what I am doing.
For design work, which typically involves heavy analysis and general thinking, I need it very quiet, and lots and lots of light. Big freakin' notepad (white is best), with mech pencils.
For coding, after all the really heavy thinking has been done, I typically want blaring music - almost invariably I play stuff from The Prodigy; especially from "The Fat of the Land"; especially "Breathe", "Smack My B---- Up", "Funky S---", and "Mindfields". Something with a fast beat sets a good pace for my fingers on the keyboard, but I simply can't think if I play that stuff while trying to design. And I haven't tried it, but I wouldn't be surprised if I'd like dark for coding as much as I like light for design - but it'd have to be at least light enough to read by, in case I need to refer to something in the design. Maybe some sort of twilight'd be best.
...so many things wrong with it, i don't know where to start"
Maybe if you're worried a parent would use this on teenagers, but in that case I doubt the teen would have too much trouble removing it.
What's wrong with it? As a parent, this would take a huge load off my mind. Not that it would absolve me of the responsibility to keep an eye on my child; but if my daughter were lost or kidnapped, you'd better believe I'd be glad to have one of these on her!
I don't think it is either intended or practical as a "Big Brother" device, if that's what you're worried about. I think it's incredibly practical as a safety device.
Seems like a natural extension to me of the webcams in institutional babysitting places so parents can watch their kids
WTH?? Do you honestly think that the webcams in daycare centers are to keep an eye on their kids? Heck no! It's to keep an eye on how your kids are treated by the babysitters!! There are way too many people in that career who haven't a clue how to properly treat other people's kids!
I worked as a classifieds ad taker at a small newspaper a few years ago, and this one daycare owner came in, with about 8 kids in tow, to place a daycare ad, while screaming and yelling at these kids to shut up! Sometimes there are cases of neglect or even hitting - I sure as heck wanna know what's happening to my kids!
I do think that parents have a right to know what their kids are up to - but I also think that constant monitoring is a huge sign of a lack of trust, and probably other problems (although, there are some kids who'd merit such monitoring...)...I even know of parents who read their kids' diaries... >:-(
I note that the author of this article links Stallman's Free Software philosophy with socialism, and in the same breath makes quite plain that he doesn't know a thing about RMS or the meaning of Free as applied to software (this I infer from his linking to www.stallman.org in the following excerpt):
On top of that there are idealists galore that, while living under the umbrella of educational welfare (i.e. career students and professors) or enjoying the benefits of a capitalist society while superimposing their socialist idelologies, like to wax poetically about how
everything should be free as in beer, or water, or whatever the silly saying is.
Now, I don't know RMS's opinion on micropayments, but I doubt that he's against worthy content providers being reimbursed for their expenses. I don't know of a single instance where he has claimed that anything should be free as in beer, period. Free as in freedom, yes.
Obviously, someone has made some fairly rash generalizations about these ideologists.
Gee, I'm glad your religion does not ever make such profound assumptions!
And what do you know about my religion? Where have I presented any assertions to you, let alone any assertions I didn't present evidence for?
I get offended when religious fanatics attempt to remove evltion from school curriculmn entirely.
Perhaps you are aware of some movements I am not, but in fact the only movements which I am aware of are movements to be allowed to present creationism along-side evolution. Let the students choose for themselves - obviously, it'll be a no-brainer if all the evidence is clearly on your side, no?
I don't particularly care for your making generalizations about some religious fanatics you may have observed, and then applying them to me, without knowing anything whatsoever about me.
People who believe in God or creationism with blind, religious faith (it's true because it's true - and that's it!) offend me about as much as they offend you. Don't make assumptions about an entire viewpoint just because of the fiew moronic folks you may have had the luxury of observing.
It depends very heavily on what you want to do. Even what operating system you intend to work with makes a tremendous impact on what the skillset should be. For instance, I'm a Unix programmer, and any experienced Unix programmer really should know C--even if it's not the actual language you'll spend most of your time with, C knowledge goes a long way on Unix. I personally find plenty of work in C, but then I believe that the fact that I'm rounded out with knowledge of several other useful languages does a lot for my chances in comparison with other candidates.
I've avoided Windows work where I can (it's just not my thing), so take my advice about it with a pound of salt, but my impression is that C# is a very good language to know right now. C# is really quite similar to Java, and so a lot of knowledge from one will transfer to the other (the chief differences may not be in the languages themselves, but between .NET and the Java Class Library). Knowing a little C++ and a solid understanding of using it in a Microsoft environment (which is perhaps more important than knowing C++ solidly for many jobs), will go a long way toward bringing you ahead of other C# candidates that don't have much C++; there are many limits to what you can accomplish in the real world with .NET alone.
I don't really enjoy working with Java, but I think it'll be a long time before Java programmers start running out of work. Writing phone apps seems like a pretty easy job to get with Java.
My personal creed is to learn the languages and technologies I want to know; I usually give little thought to how useful it will actually be for my career. That philosophy is admittedly somewhat naïve, and would absolutely need to be adjusted in a truly awful job climate; but it has worked well for me so far. I think I tend to snag jobs in which I'm happier, since I'm working with technologies I like (note, though, that in the larger picture, comfort with the technology really plays a very minor role in total job satisfaction).
There's a limit, though, to how well this can work for you. Several languages I've got good understanding of, such as PostScript or Haskell, I have no illusions of applying any time soon in a job. Similarly, I expect that knowing Fortran these days may have limited practical usefulness, especially when those jobs that do require Fortran can probably find much more experienced folks than a college grad. (However, you may find that familiarity with m4 is at least occasionally useful, and more so if you work in a Unix environment that depends on autoconf and the like).
It's a major economic recession, so open source will utterly disappear.
Just like it did when the dot-com bubble burst.
The State monad is absolutely not "mutable variables". It's a mechanism for successive transformations of a state value, which is pure functional programming defined.
In my 20 years of development experience, I think nothing is so valuable as writing discrete pieces of functionality wholly separate, hiding the implementation details from the interface. Always write code as if you'll have to completely replace it (you probably will at some point), with an eye to making that as painless as possible (IOW, you won't have to change other code just because you changed this chunk).
I'd also recommend checking out the Test-Driven Development paradigm, which ensures you have complete test coverage for every line of code you write. It's not a panacea, but it really provides confidence that your code is correct, and makes it easy to ensure past mistakes are not repeated. I'm an extremely careful coder, and it still does wonders for my code quality, and often also my productivity/efficiency.
you need to understand a rigorous mathematical construct in order to write a "Hello World" program.
Um... main = putStrLn "Hello World". And you don't have to understand the gory details of how Monads work in order to use them in a do-expression. It's a useful thing for a mature Haskell programmer to know (or, like me, a new but thorough learner), but hardly required.
That a language has "functional aspects" doesn't make the language itself "functional". By the same reasoning you use, Python is a "functional language" too. Hell, even Perl has closures and lambda. And Python has list comprehensions and such. Pretty much every high-level language has these things; that doesn't make them functional.
This is only true for specific implementations. The Haskell 98 report only specifies library support for textual input/output, and is completely useless for portably handling Binary IO. That everyone just uses GHC anyway, which has great support for Binary IO, doesn't negate the point that Haskell itself sucks when it comes to IO.
Other serious shortcomings would have to include lack of proper locale/encoding support (characters are read in as Unicode values; but what is the original encoding assumed to be, then? Current implementations do byte-for-byte, which also isn't great), and lack of serious exception-handling (though that is probably mitigated considerably by the Maybe monad in combination with "do").
Haskell is a gorgeous language, but it does have some serious shortcomings, at least when it comes to the official specification as opposed to popular implementations. GHC has done much in making it a truly useful language, and so most people mean GHC when they say "Haskell". Which is plenty portable enough, I guess, considering that it is capable of using GCC as the compiler backend.
I wonder what you mean by "automatic", considering you have to explicitly define the type of the imported/exported interface.
JavaScript is decidedly not a functional language. It's a language that "functions", maybe that's what you meant. "Functional programming language" means something else entirely, though.
Bought this with great anticipation a couple of weeks ago. It's boring as hell, a great disappointment.
The surprisingly awesome shareware game. Large and detailed. And the demo can play for like two hours, so you get a pretty good idea of whether you'll like the game or not.
It's an underwater fantasy action-adventure game. See videos here.
Programs don't read /etc/passwd to get passwords (nobody stores 'em in there any more), they read /etc/passwd to map between user ids and user names. Chalk this up to the most overhyped nothing I've seen posted to /. for a while...
A terrific way to get involved in the community is to simply take on the attitude that, whenever you encounter a problem or annoyance in software that you use and care about, you will take responsibility for fixing it. This is, in fact, how I have recently gotten involved in several FLOSS projects in the last year and a half.
Every time you encounter a bug, feel free to report it, but also, investigate it. Is it crashing? Whip out the debugger (and recompile from source, if necessary, to get debugging symbols). Some annoyance? Look at the code logic, and write up a patch, including it with your report to the developers.
This is not only a great way to get involved in FLOSS projects; it's also a terrific way to learn about the software you use, and further your education as a software developer.
I make a point of paying no mind to insane claims.
A small clarification. Some people seem to think I said that the article doesn't take folding into account. I never claimed this.
What I did claim is that it assumes such folding doesn't happen until it's mathematically impossible for it not to happen. Perhaps I misread something, but this does seem to be the case.
Someone else pointed out that ancestry doesn't quite coincide with genetics. Right: my bad.
The thing is, it just doesn't seem like they were all that careful in their analysis; they didn't explore other possible reasons for the results they were seeing, and (as I said previously) they seem to assume an equal likelihood for ancestry across the entire spectrum of available humans for the time period, which is clearly untrue.
The math only works if you assume that the ancestry never coincides with itself until it is mathematically impossible for it not to do so. This is ludicrous. Ancestry will coincide many, many times before that point. It is easy to demonstrate mathematically that it is more than possible for an ancestry to fold in on itself repeatedly, without touching other distinct lines.
The basic assumption (flawed), is that having trillions of "ancestors" means that it fold in across the entire spectrum of living people at a given time, when it can in fact fold in multiple times on a selection of that population; or that having any particular person as your ancestor is almost precisely as likely as any other arbitrary person. Historically, there are many social constrictions to make such statistics highly unlikely.
It also seems obvious to me, that were interracial marriages so common place so long ago (across the last few thousand years, even), the world would not be quite as genetically diverse a place as it currently is.
Disclaimer: IANAM(athematician). However, I do love math, and this seems like a fairly obvious and very easily provable flaw. I'm also probably misusing the phrase "fold in" above, though: but I imagine everyone can understand what I mean by that.
Any of the Myst games II-IV (Riven, Exile, Revelations).
Final Fantasy VII, VIII and X.
Syberia. ICO (PS2).
And of course several Lucas Arts adventures such as The Dig, Grim Fandango, Full Throttle
Sounds like a job for Hari Seldon's Time Vault, to me. ...just build a machine too complex to analyze from without, and which will destroy itself if tampered with...
What apparently doesn't occur to you, is that there are people in this world who actually code for fun, and not only when they have a massive project due.
There are some of us who would much prefer bringing a laptop to code on during a long wait over twiddling our fingers.
'Course, a good technical book is perfectly adequate as well. But if you're in the midst of something fun, you're not gonna let something like a little movie stop you.
Not that it really matters, but the universal network in "Serial Experiments: Lain" was called "the Wired"; Navi (short for Navigator?) was what they called the computer used to access the Wired.
Also, VoIP wouldn't be quite the same thing as the Wired, where everyone also represented themselves with virtual effigees (sp?), much like some 3D chatrooms, or the world in Neal Stephenson's "Snow Crash".
I'm still experimenting in trying to find the optimal conditions, but I at least note that the Zone differs very greatly depending on what I am doing.
For design work, which typically involves heavy analysis and general thinking, I need it very quiet, and lots and lots of light. Big freakin' notepad (white is best), with mech pencils.
For coding, after all the really heavy thinking has been done, I typically want blaring music - almost invariably I play stuff from The Prodigy; especially from "The Fat of the Land"; especially "Breathe", "Smack My B---- Up", "Funky S---", and "Mindfields". Something with a fast beat sets a good pace for my fingers on the keyboard, but I simply can't think if I play that stuff while trying to design. And I haven't tried it, but I wouldn't be surprised if I'd like dark for coding as much as I like light for design - but it'd have to be at least light enough to read by, in case I need to refer to something in the design. Maybe some sort of twilight'd be best.
Maybe if you're worried a parent would use this on teenagers, but in that case I doubt the teen would have too much trouble removing it.
What's wrong with it? As a parent, this would take a huge load off my mind. Not that it would absolve me of the responsibility to keep an eye on my child; but if my daughter were lost or kidnapped, you'd better believe I'd be glad to have one of these on her!
I don't think it is either intended or practical as a "Big Brother" device, if that's what you're worried about. I think it's incredibly practical as a safety device.
WTH?? Do you honestly think that the webcams in daycare centers are to keep an eye on their kids? Heck no! It's to keep an eye on how your kids are treated by the babysitters!! There are way too many people in that career who haven't a clue how to properly treat other people's kids!
I worked as a classifieds ad taker at a small newspaper a few years ago, and this one daycare owner came in, with about 8 kids in tow, to place a daycare ad, while screaming and yelling at these kids to shut up! Sometimes there are cases of neglect or even hitting - I sure as heck wanna know what's happening to my kids!
I do think that parents have a right to know what their kids are up to - but I also think that constant monitoring is a huge sign of a lack of trust, and probably other problems (although, there are some kids who'd merit such monitoring...) ...I even know of parents who read their kids' diaries... >:-(
Now, I don't know RMS's opinion on micropayments, but I doubt that he's against worthy content providers being reimbursed for their expenses. I don't know of a single instance where he has claimed that anything should be free as in beer, period. Free as in freedom, yes.
Obviously, someone has made some fairly rash generalizations about these ideologists.
And what do you know about my religion? Where have I presented any assertions to you, let alone any assertions I didn't present evidence for?
I get offended when religious fanatics attempt to remove evltion from school curriculmn entirely.
Perhaps you are aware of some movements I am not, but in fact the only movements which I am aware of are movements to be allowed to present creationism along-side evolution. Let the students choose for themselves - obviously, it'll be a no-brainer if all the evidence is clearly on your side, no?
I don't particularly care for your making generalizations about some religious fanatics you may have observed, and then applying them to me, without knowing anything whatsoever about me.
People who believe in God or creationism with blind, religious faith (it's true because it's true - and that's it!) offend me about as much as they offend you. Don't make assumptions about an entire viewpoint just because of the fiew moronic folks you may have had the luxury of observing.