And yet here is a normal person, trying to use it, and finding it frustrating and causing her problems, and people mock her attempt.
"Normal" is a very flexible definition depending on whoever sets the boundaries between normal and stupid. In my opinion a very stupid woman spoke to a very stupid Dell rep who wasn't able to tell her how to start OpenOffice (for fucks sake Applications/Office/Writer -how hard is that?) and relied on very stupid Verizon that can't produce an Ubuntu Linux installer for their silly software package.
Why was she stupid? From TFA, she couldn't use her ISP because they had a windows only setup disk. She couldn't do her school work until the issue was fixed because her school explicitly said "Microsoft Word Required".
Yes, there are ways to work around these issues... but she did not know about them.
Your definition of stupid seems to be "doesn't know something basic about Linux". I happen to know plenty of things that you don't know... probably plenty of things about *LINUX* you don't know, in fact as it's my job to write software for Linux...
By your definition, doesn't that make *you* stupid?
it's your responsibility as owner of the fucking machine to understand at least a bit of how it works.
Huh... so tell me, do you think you know how your computer works? Really? Because most people I know who use computers and "think they know how they work" couldn't explain to me how an arithmetic logic unit works.
People aren't "required" to know how their computers work, and it doesn't make you "smarter" because you know open office can read doc files.
In short, please put your intellectual dick back in your pants. No one is impressed.
The main reason I've avoided QT in the past is the licensing... I can understand releasing an application under GPL, but it's very obnoxious when it is used for a library.
Even among open source developers, not everyone wants to release under GPL. People like myself like apache, BSD, MIT, etc, but using a GPL library forces us in practice to release under GPL terms as well.
I've heard a lot of people on slashdot say the model M is awesome, but why? Supposedly annoyingly loud clicky noises are... good? Huh?
Here's what I look for in a keyboard 1. Easy to pop the keys in and out so I can keep the thing clean. 2. Thin laptop style keys. 3. QUIET, I don't need a loud click to let me know I typed a letter. I can see it on the fricking screen. 4. not too hard to press down 5. Doesn't gum up. 6. Control key, windows key, escape key are in reasonable positions.
I then take that keyboard, and remap the capslock key to be a second control key. After all, when was the last time you needed to use capslock? Never.
You'll be able to pick up very good, experienced developers for half, maybe a third of their current salaries.
Uh, good luck with that.
So, after you've tanked moral by paying your developers way less than they think they are worth, what do you think is going to happen when the economy picks up? They are all going to jump ship, and you are going to be left with code written by people who hate their job. Hint: not quality code.
When developers ask for a new monitor or dual monitors, let them have 'em but mandate that the monitors be in a vertical orientation as opposed to the typical horizontal orientation.
The point of wide screen monitors is that you put two source files on the screen side by side. A cpp file and its header file. A java file and its unit test. You get the idea.
What irritates me is that most IDE's won't let you do this properly. Emacs has this built in though, and I've made it work with other editors (slickedit).
Anyway, if you don't trust your highly paid engineers enough to not spend all day watching movies, then you have other problems.
although you may not have noticed, steam will let you start many games before they are finished downloading.
I noticed this when I accidentally double clicked Half Life 2: episode 1 before it finished downloading, and it launched. I'd assume it works for normal half life 2 as well.
Steam will selectively bring in the art for the level you are currently playing first. So, you will get a little bit longer loading screen, but otherwise it works about as ok as steam and half life ever worked (which is to say, filled with bugs).
>use Applications->Add/Remove, for unsupported download a.deb and double click on it)
I still cannot get firefox 3 installed because of bullshit like this.
The distro repositories are always immediately out of date because after release, a distro never upgrades packages for that release.
Download a.dab? Are you kidding? Have you ever even tried that? Let me save you some time. It doesn't work. There is no binary compatibility between distros, so it's almost impossible to write a third party binary package that works on more than 1 version of ubuntu. A few commercial guys do it by statically linking everything, but there are *no* open source third party binary packages that work like that.
>The only time it's hard is if the third party software doesn't bundle a.deb, preferring to distribute as source or something similar. Are you new to Linux? The answer is source. If you want to install 3rd part software you have to use source.
>But the same is a PITA under Windows, more of one indeed because Windows doesn't ship with a development environment.
Windows doesn't *need* to ship with a dev environment because they keep binary compatibility with libraries. So an.exe compiled for windows 95 still will run on Vista. Compared to Ubuntu, where binaries are incompatible 6 months from now, this is *way* better.
Look, I use Linux every day, and the number one thing I'm sick of is compiling shit. I don't want to have to spend 2 hours compiling my god damn e-mail client just to get it installed, when I know I could do the same thing on windows or osx in 30 seconds.
I've used and like Linux for years, but this is why I can't *stand* Linux fanboys. They are the most ignorant Linux users out there, and are too busy talking about how awesome to actually *use* Linux for anything meaningful, or to understand toe problems it faces.
>users installing software and performing tasks outside of the sandbox offered by the package manager.
Why do distro makers think the solution to making software easy to install on Linux is to make a bigger pacakge repository?
It's way easier to get the sofware you want for Windows or OSX, because you can just get a binary installer for it. They never needed some overengineered package manager, just a stable set of ABIs.
Today I still can't install Firefox 3 on my distro because of library version skew, and the fact distro makers won't let you install new software without upgrading your entire distro.
Really, I'm tired of either living with old software or having to spend hours getting the dependencies to build it from source! Just give me a stable ABI and an installer any day of the week.
>Yes, but one of those worlds is a steaming pile of shit.:)
Yes, we should smile because it's fun to make fun of a much more successful product.
>have to agree with LithiumX: OSX isn't nearly as usable as it could be. It's always fun when people using an OS that until recently required you to change resolutions by editing an text file and *restarting x* criticize the usability of OSX.
>People like macs because they look good. >This is seriously something to consider esp if you want to cater to the coffee shop crowd.
You're reducing people who use a competing product to a steriotype, and refusing to admit that said product could have any real world advantages aside from "looking good." You don't think that's a little childish?
>One of the things I really liked about my school was that every school computer had Visual Studio installed
Yes, in my case as well, there were some computer savy teachers along the way have gave guidance and access to machines. Without them I probably wouldn't have gotten as far as I have today.
However, I feel that overall they were the exception, and most teachers, and especially school district bureaucrats, did more to squelch learning and experimentation. Most people involved in the school system seemed to view it as a kind of day care meant to keep us out of trouble more than to teach us anything.
>Biofuels from macrocrops are generally infeasible, especially corn.
Right. That's what people generally refer to when they say biofuel because we actually produce biofuel in practice. If the government allocates money for biofuel... it is going to corn based biofuel.
>Biofuels from algae are energy-positive... > nd are currently our best hope of weaning ourselves from foreign oil.
Phht, the grass always looks greener on the other side of the hill.
You can say it would save the day only because it has not been tried at scale, so we don't yet know what underlying challenges and costs it would present.
This is a persistent problem with how people evaluate energy solutions. Originally, nuclear fission was supposed to solve all of our energy needs. It was supposed to be safe, and cheap enough that we wouldn't have to meter it. Then we tried it out, and there were problems. Now, everyone knows about those problems so there is little political will to pursue the nuclear power further. However at this point in time, nuclear power has actually become more practical and safer than when we originally were enthusiastic about it.
I'm not arguing for nuclear power here. I'm pointing out the flaw in the underlying reasoning, which is that *any* new technology that hasn't been put into widespread production is going to always look sexier than a practical solution that exists today.
. Any technology to replace fossil fuels is going to be incredibly costly to develop and make safe because of the scale we are talking about. We don't need to switch gears again for the Nth time and start from scratch on "magic energy technology X" that will solve all of our problems while costing us nothing.
We need the fortitude to take one of the technologies, such as nuclear, which has been maturing for decades, and *scale it up* and *solve* the hard problems it presents. It won't be easy, but what people refuse to understand is there *is no easy way out* of the problem we are suffering.
Remember, the whole reason we are in this mess is because we acted like short shighted morons. Doing the same thing over again and calling it "green" won't solve the problem.
>With that being the case, expect that there will be students that will use >the computer for their own personal leisure and students that will really >use them as they were intended to be used.
I think it's fair to say that *every* student will use a computer for entertainment and for social communication. This is the 21st century, that's what people *do*.
Since when are kids not allowed to have fun anyway? This is why schools fail at everything. People who come up with educational policy are so disconnected from reality that they think "oh, we can't give these students something they might have fun with! OMG!"
Along the same lines, teachers are more concerned with preventing kids from seeing porn than they are concerned with actually educating them. Which is funny because we know from tests that schools fail at both tasks.
That you leave root access on, or at least install the developer tools.
What the real tragedy is, is that when school's lock machine's down, they usually do it in a way that prevents the main goal of giving the kids access to computers in the first place: learning.
If the machine doesn't come with apple's developer tools, and the kids don't have root access so they can install additional *unix* software to/usr/bin, you have already totally failed in giving them the computer. Yet, this is usually the sort of things school's do.
What's the point of giving kids computers if they can't learn about them by tinkering with them?
As far as the protections you are talking about, I have to agree with everyone else when I say they are insanely draconian and kind of pointless.
No matter what you do, I can guarantee you within a month every kid is going to know how to get around them to look at porn on those things, and realistically that's the main thing parents would like to stop. I mean, do you really think that thousands of high school kids are going to be too dumb to figure out how to use a proxy? That not one guy is going to figure this out and tell everyone else? How dumb are your kids exactly?
This is part of the reason why public schooling in the united states is so utterly worthless. It's not because american kids are magically just dumber than kids in other countries, and it's not for lack of funding. The culture of the "educators" is the problem. I'm 24 now and have graduated from both high school and college, but I still remember high school well, and it's the patronizing and incompetent teachers that made it so worthless of a learning experience.
If you start off assuming that your kids are too dumb to learn anything, to want to play with technology, the be able to get around the trivial restrictions you are talking about, then how do you expect to ever teach them *anything*? You won't, and so far testing indicates you *haven't*.
That's a good point about type systems being able to prove things about a program. However, you got some important details wrong.
First of all, this does not apply to duck typed languages like python. Python provides a form of type safety, but it is a different sort than statically typed languages that prove their correctness when they compile. There's nothing known a priori about the type correctness of python.
I'm not saying it's a bad language, in fact, I think it's a great language, but it isn't in the right class of languages to get the sort of benefit you are talking about. The benefit that safe dynamic typing brings is it prevents memory corruption and buffer overflows (like you mentioned) which are a separate concern from program correctness.
Also, you mentioned Java as a strongly typed language. This is not true. Java has prevalent use of casts and null, both of which break static type safety. Java provides *dynamic* type safety for null and casting, unlike C++, but that isn't enough to get the kind of a priori guarantees that we are talking about.
In a truly type safe language, if you have a variable of type T, then any operation f defined for T will execute on any object of type T, o.
So f(o), or o.f() in object oriented terminology will always be defined.
However, in Java if o is null, o.f() will fail with a null safety exception.
Null is actually a holdover from C which does not appear in truly type safe languages. See the language SML for an example.
Also, in Java prior to release 1.5, there were many situations where the programmer was forced to perform dynamic casting. Dynamic casts violate type safety because they apply a type at runtime to an object that is not known a priori to hold that type.
Java 1.5 helped to remedy this situation, but that this was ever a problem demonstrates that Java was not designed from the ground up for static type safety. Generics are very old, the only reason that they weren't included in 1.0 was because the type system for the original java wasn't thought through very well.
>apt-get install openjdk-6-jre openjdk-6-jdk icedtea-gcjwebplugin >Sun has always made it a royal pain to use their java You are criticizing sun java, but that *is* sun's Java implementation. The only part that isn't is the icedtea-gcjwebplugin.
>For years they've always wrapped everything in click-through licenses, so you couldn't just download it and install it using your distro's packaging system.
Huh? For years I've been able to download and install sun java through ubuntu. Before they rebranded it as "openjava" you could still download it. The ubuntu package manager would *pop up* that clickthrough license that you are talking about.
>, it's not open source under the Open Source Definition
Not being open source doesn't stop it from being used on Linux... Most production Linux systems have proprietary software on them, especially proprietary drivers and firmware. You probably have some on your box and don't even know it.
For that matter, it's impossible to have a completely open source system because the hardware itself is not open source. Stopping at the software layer is totally arbitrary. All Linux users have *some* level of comfort with proprietary technology.
For that matter, Sun controls Java's language definition, so the language itself isn't really open. If you want an open platform, use C++, Python, Ruby, Javascript or any other language that is community controlled or standards based. Java is really an awful language, so I don't understand what your holdup is. You need to use Java, but not Sun Java? Use Java or don't, but don't Use Java and try to do it in a stupid way that will never work properly
People widely use Sun Java in production environments because the alternatives are buggy as hell. The "openjdk" you reference is actually just sun java repackaged, not an independent effort, but I used the older open source versions of java back in the day, and they were all awful and buggy. GNU Classpath in particular just does not implement much of the java libraries.
What makes C a good introductory language is that it is simple syntactically. The core language can be picked up quickly, and then work can be done.
That is is imperative/functional/low level/high level doesn't really matter. A good course will cover roughly the same algorithms material.
The important thing about a first programming language is that the language should get out of the way.
Good educational languages: 1. C 2. scheme
Languages that shouldn't be used for intro courses: 1. Python 2. Java 3. C++ 4. small talk 5. SML
These are all excellent languages (except java) but they all have something in common. They implement polymorphism (either runtime via vtables or compile time via generics/templates). Think about that for a second, how do you teach polymorphism to someone who doesn't know what a loop is? You don't. That stuff comes later.
In addition, the "for each" loop which most of these languages have (now even C++), hides the details of iteration and recursion; which are important concepts you want to teach.
Finally, the fact that the underlying language already implements all the data structure and algorithms that you are trying to teach undermines the course, because the question always comes up "why are we learning this when it is already written?".
On Linux Firefox doesn't distribute RPM's or DEB's for the various major platforms, and most vendor's don't provide new software for distros once they've been released.
Also, getting firefox 3 compiled from source on older distros is incredibly difficult due to version skew of various libraries. I got most of the way there, and gave up.
People who use linux for work are often stuck on older distros due to long corporate maintanance cycle's. It costs them a lot of money to roll out a major update to thousands of machines, especially if you are developing software on top of them.
Thus, it really sucks that there is no way to put newer software on older linux OS's without running into library version hell. Especially since this is so easy on other platforms. After all, who has trouble getting software working on XP?
>e GNU standards document, section 3.1 [gnu.org]: "Which Languages to Use" strongly advises plain old C for both performance and absolute maximum cross-platform compatibility.
FSF software is largely written in C, and they were the guys who published that document. It made sense in the 90's because C was one of the few cross platoform and highly efficient languages available at the time. Also, the C compiler GCC was and is the flag ship product of the FSF so of course they are going to push C.
That some people still push C for application programming is mostly because there are still a lot of old timers who aren't familiar with modern programming languages.
Anyway, if you need a standardized cross platform language these days you have many better choices. Python springs to mind. Java works as well, although I find the language design somewhat poorly thought out.
If you still need the performance benefits of C, you should use C++, which is actually faster than C due to the performance benefits of template programming. C++ provides higher level abstractions like object orientation, virtual functions, and templates.
Many people still use C over C++ due to the simplicity of the C syntax. C is easily learned compared to C++. This is a benefit; however, if you are a serious developer, you should just bite the bullet and learn C++, as it will make you more productive and allow you to write safer code by using smart pointers and stl containers.
That said, you should learn C as well, as it is still a useful language, especially when doing kernel space programming. There's no reason to write a non-embedded user space application in any language lower level than C++ though.
However, there are some real world reasons why people don't always prove their algorithms, and almost no one uses functional languages.
First, most programming problems in the real world are so intellectually tedious that proving the correctness of their algorithms would be waste of time. Many algorithms *should* be proven, but consider how much of you code is just boilerplate, and doesn't really do anything algorithmically interesting. Usually around 99%.
Second, functional programming doesn't allow state manipulation, so a lot of algorithms can't be done in them.
A lot of people will point you to lisp dialects such as scheme. Unfortunately, the *only* thing you will get from scheme is functional programming.
Another important concept that's actually very relevant to real world programmers is type safety. Generics, templates, etc, are inspired by languages like SML, and it's a good idea to try SML to get a feel for how type safety and genericism is supposed to work.
Also, you may notice at some point using SML, that type safe languages don't have null, which is something the guys who wrote Java were never told.
>If moving to a functional programming language >breaks your algorithms, then you are somehow >doing it wrong. That line doesn't even make sense >to me. Algorithms are mathematical constructs >that have nothing to do with programming >paradigm. Assuming the language is Turing >complete, how is that even possible?
You are confused about the definition of an algorithm, and the significance of Turing completeness.
First of all, an algorithm is a *way* of doing things with an associated complexity specification (a mathematical description of how long it will take to run often denoted like O(n)).
Two turing equivalent machines don't necessarily support the same algorithms, although they will always have *equivalent* algorithms that get the same job done. HOWEVER, those algorithms don't necessarily have the same complexity. For instance, on turing machine A a sort might be done in O(n^2) while on turing machine B a sort can only be done in O(n^3).
To be functional means to be stateless. If you don't have state, then all sorts of algorithms become much more expensive. Notably, it's impossible to do a quicksort in a functional language, although other less efficient sorts may be done. Some people respond to that by saying that you can just buy a faster computer if you want to run functional algorithms; however, anyone with a decent computer science education knows that this can't solve differences in assymtotic complexity.
NOTE: quicksort (which cannot be done functionally) does not have better worst case (big O notation) complexity than mergesort (with can be done functionally), but it does have best average case and takes advantage of the underlying machine implementation much better. In some ways it is a bad example, but most people are familiar with sorting, whereas few people are familiar with dynamic algorithms.
The reason that functional programming languages exists goes back to Church and Turing. Church invented lambda calculus, and Turing invented Turing machines. Both are computationally equivalent in their power.
Turing machines have state, and are essentially a description of a hypothetical machine. Lambda calculus, is well, a calculus. It is functional in nature and has no state.
Not surprisingly, real world computers look more like turing machines than they do Lambda calculus evaluating machines. Also, virtually all programming languages are built around state manipulation, since that's what the underlying hardware has to do.
The idea of a functional programming language is to emulate the lambda calculus on a rough approximation of a Turing machine. Technically it's possible for any Turing equivalent machine to emulate any other. However, since the two machines are so different, this makes things dog slow. Again, faster computers don't solve this problem because there is an assymtotic difference in complexity, not a constant factor difference.
And yet here is a normal person, trying to use it, and finding it frustrating and causing her problems, and people mock her attempt.
"Normal" is a very flexible definition depending on whoever sets the boundaries between normal and stupid. In my opinion a very stupid woman spoke to a very stupid Dell rep who wasn't able to tell her how to start OpenOffice (for fucks sake Applications/Office/Writer -how hard is that?) and relied on very stupid Verizon that can't produce an Ubuntu Linux installer for their silly software package.
Why was she stupid? From TFA, she couldn't use her ISP because they had a windows only setup disk. She couldn't do her school work until the issue was fixed because her school explicitly said "Microsoft Word Required".
Yes, there are ways to work around these issues... but she did not know about them.
Your definition of stupid seems to be "doesn't know something basic about Linux". I happen to know plenty of things that you don't know... probably plenty of things about *LINUX* you don't know, in fact as it's my job to write software for Linux...
By your definition, doesn't that make *you* stupid?
it's your responsibility as owner of the fucking machine to understand at least a bit of how it works.
Huh... so tell me, do you think you know how your computer works? Really? Because most people I know who use computers and "think they know how they work" couldn't explain to me how an arithmetic logic unit works.
People aren't "required" to know how their computers work, and it doesn't make you "smarter" because you know open office can read doc files.
In short, please put your intellectual dick back in your pants. No one is impressed.
The main reason I've avoided QT in the past is the licensing... I can understand releasing an application under GPL, but it's very obnoxious when it is used for a library.
Even among open source developers, not everyone wants to release under GPL. People like myself like apache, BSD, MIT, etc, but using a GPL library forces us in practice to release under GPL terms as well.
I've heard a lot of people on slashdot say the model M is awesome, but why? Supposedly annoyingly loud clicky noises are... good? Huh?
Here's what I look for in a keyboard
1. Easy to pop the keys in and out so I can keep the thing clean.
2. Thin laptop style keys.
3. QUIET, I don't need a loud click to let me know I typed a letter. I can see it on the fricking screen.
4. not too hard to press down
5. Doesn't gum up.
6. Control key, windows key, escape key are in reasonable positions.
I then take that keyboard, and remap the capslock key to be a second control key. After all, when was the last time you needed to use capslock? Never.
You'll be able to pick up very good, experienced developers for half, maybe a third of their current salaries.
Uh, good luck with that.
So, after you've tanked moral by paying your developers way less than they think they are worth, what do you think is going to happen when the economy picks up? They are all going to jump ship, and you are going to be left with code written by people who hate their job. Hint: not quality code.
Ok, I'll bite .. what do you actually use the 2nd monitor for ?
You have to ask?
Running the gui application you develop in the other window.
Run the web application you develop in the other window.
Documentation.
Uh... everything you already use virtual desktops for?
Who will be the first to post "ICodeInJavaWithClassesWithReallyReallyReallyLongNames.youIgnorantClod();" ?
80 column rule ftw.
Seriously, if you have a wide screen monitor, you *really* want the 80 column rule. It lets you put two source files side by side.
When developers ask for a new monitor or dual monitors, let them have 'em but mandate that the monitors be in a vertical orientation as opposed to the typical horizontal orientation.
The point of wide screen monitors is that you put two source files on the screen side by side. A cpp file and its header file. A java file and its unit test. You get the idea.
What irritates me is that most IDE's won't let you do this properly. Emacs has this built in though, and I've made it work with other editors (slickedit).
Anyway, if you don't trust your highly paid engineers enough to not spend all day watching movies, then you have other problems.
although you may not have noticed, steam will let you start many games before they are finished downloading.
I noticed this when I accidentally double clicked Half Life 2: episode 1 before it finished downloading, and it launched. I'd assume it works for normal half life 2 as well.
Steam will selectively bring in the art for the level you are currently playing first. So, you will get a little bit longer loading screen, but otherwise it works about as ok as steam and half life ever worked (which is to say, filled with bugs).
>use Applications->Add/Remove, for unsupported download a .deb and double click on it)
I still cannot get firefox 3 installed because of bullshit like this.
The distro repositories are always immediately out of date because after release, a distro never upgrades packages for that release.
Download a .dab? Are you kidding? Have you ever even tried that? Let me save you some time. It doesn't work. There is no binary compatibility between distros, so it's almost impossible to write a third party binary package that works on more than 1 version of ubuntu. A few commercial guys do it by statically linking everything, but there are *no* open source third party binary packages that work like that.
>The only time it's hard is if the third party software doesn't bundle a .deb, preferring to distribute as source or something similar.
Are you new to Linux? The answer is source. If you want to install 3rd part software you have to use source.
>But the same is a PITA under Windows, more of one indeed because Windows doesn't ship with a development environment.
Windows doesn't *need* to ship with a dev environment because they keep binary compatibility with libraries. So an .exe compiled for windows 95 still will run on Vista. Compared to Ubuntu, where binaries are incompatible 6 months from now, this is *way* better.
Look, I use Linux every day, and the number one thing I'm sick of is compiling shit. I don't want to have to spend 2 hours compiling my god damn e-mail client just to get it installed, when I know I could do the same thing on windows or osx in 30 seconds.
I've used and like Linux for years, but this is why I can't *stand* Linux fanboys. They are the most ignorant Linux users out there, and are too busy talking about how awesome to actually *use* Linux for anything meaningful, or to understand toe problems it faces.
Every Linux user should read:
http://linuxhaters.blogspot.com/
>users installing software and performing tasks outside of the sandbox offered by the package manager.
Why do distro makers think the solution to making software easy to install on Linux is to make a bigger pacakge repository?
It's way easier to get the sofware you want for Windows or OSX, because you can just get a binary installer for it. They never needed some overengineered package manager, just a stable set of ABIs.
Today I still can't install Firefox 3 on my distro because of library version skew, and the fact distro makers won't let you install new software without upgrading your entire distro.
Really, I'm tired of either living with old software or having to spend hours getting the dependencies to build it from source! Just give me a stable ABI and an installer any day of the week.
>Yes, but one of those worlds is a steaming pile of shit. :)
Yes, we should smile because it's fun to make fun of a much more successful product.
>have to agree with LithiumX: OSX isn't nearly as usable as it could be.
It's always fun when people using an OS that until recently required you to change resolutions by editing an text file and *restarting x* criticize the usability of OSX.
>People like macs because they look good.
>This is seriously something to consider esp if you want to cater to the coffee shop crowd.
You're reducing people who use a competing product to a steriotype, and refusing to admit that said product could have any real world advantages aside from "looking good." You don't think that's a little childish?
the programming language is like Java the religion. That's less of an analogy as an identity though.
>One of the things I really liked about my school was that every school computer had Visual Studio installed
Yes, in my case as well, there were some computer savy teachers along the way have gave guidance and access to machines. Without them I probably wouldn't have gotten as far as I have today.
However, I feel that overall they were the exception, and most teachers, and especially school district bureaucrats, did more to squelch learning and experimentation. Most people involved in the school system seemed to view it as a kind of day care meant to keep us out of trouble more than to teach us anything.
>Biofuels from macrocrops are generally infeasible, especially corn.
Right. That's what people generally refer to when they say biofuel because we actually produce biofuel in practice. If the government allocates money for biofuel... it is going to corn based biofuel.
>Biofuels from algae are energy-positive...
> nd are currently our best hope of weaning ourselves from foreign oil.
Phht, the grass always looks greener on the other side of the hill.
You can say it would save the day only because it has not been tried at scale, so we don't yet know what underlying challenges and costs it would present.
This is a persistent problem with how people evaluate energy solutions. Originally, nuclear fission was supposed to solve all of our energy needs. It was supposed to be safe, and cheap enough that we wouldn't have to meter it. Then we tried it out, and there were problems. Now, everyone knows about those problems so there is little political will to pursue the nuclear power further. However at this point in time, nuclear power has actually become more practical and safer than when we originally were enthusiastic about it.
I'm not arguing for nuclear power here. I'm pointing out the flaw in the underlying reasoning, which is that *any* new technology that hasn't been put into widespread production is going to always look sexier than a practical solution that exists today.
. Any technology to replace fossil fuels is going to be incredibly costly to develop and make safe because of the scale we are talking about. We don't need to switch gears again for the Nth time and start from scratch on "magic energy technology X" that will solve all of our problems while costing us nothing.
We need the fortitude to take one of the technologies, such as nuclear, which has been maturing for decades, and *scale it up* and *solve* the hard problems it presents. It won't be easy, but what people refuse to understand is there *is no easy way out* of the problem we are suffering.
Remember, the whole reason we are in this mess is because we acted like short shighted morons. Doing the same thing over again and calling it "green" won't solve the problem.
in chrome the javascript breakout game you linked runs too fast to humanly play.
>With that being the case, expect that there will be students that will use
>the computer for their own personal leisure and students that will really
>use them as they were intended to be used.
I think it's fair to say that *every* student will use a computer for entertainment and for social communication. This is the 21st century, that's what people *do*.
Since when are kids not allowed to have fun anyway? This is why schools fail at everything. People who come up with educational policy are so disconnected from reality that they think "oh, we can't give these students something they might have fun with! OMG!"
Along the same lines, teachers are more concerned with preventing kids from seeing porn than they are concerned with actually educating them. Which is funny because we know from tests that schools fail at both tasks.
That you leave root access on, or at least install the developer tools.
What the real tragedy is, is that when school's lock machine's down, they usually do it in a way that prevents the main goal of giving the kids access to computers in the first place: learning.
If the machine doesn't come with apple's developer tools, and the kids don't have root access so they can install additional *unix* software to /usr/bin, you have already totally failed in giving them the computer. Yet, this is usually the sort of things school's do.
What's the point of giving kids computers if they can't learn about them by tinkering with them?
As far as the protections you are talking about, I have to agree with everyone else when I say they are insanely draconian and kind of pointless.
No matter what you do, I can guarantee you within a month every kid is going to know how to get around them to look at porn on those things, and realistically that's the main thing parents would like to stop. I mean, do you really think that thousands of high school kids are going to be too dumb to figure out how to use a proxy? That not one guy is going to figure this out and tell everyone else? How dumb are your kids exactly?
This is part of the reason why public schooling in the united states is so utterly worthless. It's not because american kids are magically just dumber than kids in other countries, and it's not for lack of funding. The culture of the "educators" is the problem. I'm 24 now and have graduated from both high school and college, but I still remember high school well, and it's the patronizing and incompetent teachers that made it so worthless of a learning experience.
If you start off assuming that your kids are too dumb to learn anything, to want to play with technology, the be able to get around the trivial restrictions you are talking about, then how do you expect to ever teach them *anything*? You won't, and so far testing indicates you *haven't*.
That's a good point about type systems being able to prove things about a program. However, you got some important details wrong.
First of all, this does not apply to duck typed languages like python. Python provides a form of type safety, but it is a different sort than statically typed languages that prove their correctness when they compile. There's nothing known a priori about the type correctness of python.
I'm not saying it's a bad language, in fact, I think it's a great language, but it isn't in the right class of languages to get the sort of benefit you are talking about. The benefit that safe dynamic typing brings is it prevents memory corruption and buffer overflows (like you mentioned) which are a separate concern from program correctness.
Also, you mentioned Java as a strongly typed language. This is not true. Java has prevalent use of casts and null, both of which break static type safety. Java provides *dynamic* type safety for null and casting, unlike C++, but that isn't enough to get the kind of a priori guarantees that we are talking about.
In a truly type safe language, if you have a variable of type T, then any operation f defined for T will execute on any object of type T, o.
So f(o), or o.f() in object oriented terminology will always be defined.
However, in Java if o is null, o.f() will fail with a null safety exception.
Null is actually a holdover from C which does not appear in truly type safe languages. See the language SML for an example.
Also, in Java prior to release 1.5, there were many situations where the programmer was forced to perform dynamic casting. Dynamic casts violate type safety because they apply a type at runtime to an object that is not known a priori to hold that type.
Java 1.5 helped to remedy this situation, but that this was ever a problem demonstrates that Java was not designed from the ground up for static type safety. Generics are very old, the only reason that they weren't included in 1.0 was because the type system for the original java wasn't thought through very well.
>apt-get install openjdk-6-jre openjdk-6-jdk icedtea-gcjwebplugin
>Sun has always made it a royal pain to use their java
You are criticizing sun java, but that *is* sun's Java implementation. The only part that isn't is the icedtea-gcjwebplugin.
>For years they've always wrapped everything in click-through licenses, so you couldn't just download it and install it using your distro's packaging system.
Huh?
For years I've been able to download and install sun java through ubuntu. Before they rebranded it as "openjava" you could still download it. The ubuntu package manager would *pop up* that clickthrough license that you are talking about.
>, it's not open source under the Open Source Definition
Not being open source doesn't stop it from being used on Linux... Most production Linux systems have proprietary software on them, especially proprietary drivers and firmware. You probably have some on your box and don't even know it.
For that matter, it's impossible to have a completely open source system because the hardware itself is not open source. Stopping at the software layer is totally arbitrary. All Linux users have *some* level of comfort with proprietary technology.
For that matter, Sun controls Java's language definition, so the language itself isn't really open. If you want an open platform, use C++, Python, Ruby, Javascript or any other language that is community controlled or standards based. Java is really an awful language, so I don't understand what your holdup is. You need to use Java, but not Sun Java? Use Java or don't, but don't Use Java and try to do it in a stupid way that will never work properly
People widely use Sun Java in production environments because the alternatives are buggy as hell. The "openjdk" you reference is actually just sun java repackaged, not an independent effort, but I used the older open source versions of java back in the day, and they were all awful and buggy. GNU Classpath in particular just does not implement much of the java libraries.
What makes C a good introductory language is that it is simple syntactically. The core language can be picked up quickly, and then work can be done.
That is is imperative/functional/low level/high level doesn't really matter. A good course will cover roughly the same algorithms material.
The important thing about a first programming language is that the language should get out of the way.
Good educational languages:
1. C
2. scheme
Languages that shouldn't be used for intro courses:
1. Python
2. Java
3. C++
4. small talk
5. SML
These are all excellent languages (except java) but they all have something in common. They implement polymorphism (either runtime via vtables or compile time via generics/templates). Think about that for a second, how do you teach polymorphism to someone who doesn't know what a loop is? You don't. That stuff comes later.
In addition, the "for each" loop which most of these languages have (now even C++), hides the details of iteration and recursion; which are important concepts you want to teach.
Finally, the fact that the underlying language already implements all the data structure and algorithms that you are trying to teach undermines the course, because the question always comes up "why are we learning this when it is already written?".
can't upgrade.
On Linux Firefox doesn't distribute RPM's or DEB's for the various major platforms, and most vendor's don't provide new software for distros once they've been released.
Also, getting firefox 3 compiled from source on older distros is incredibly difficult due to version skew of various libraries. I got most of the way there, and gave up.
People who use linux for work are often stuck on older distros due to long corporate maintanance cycle's. It costs them a lot of money to roll out a major update to thousands of machines, especially if you are developing software on top of them.
Thus, it really sucks that there is no way to put newer software on older linux OS's without running into library version hell. Especially since this is so easy on other platforms. After all, who has trouble getting software working on XP?
>e GNU standards document, section 3.1 [gnu.org]: "Which Languages to Use" strongly advises plain old C for both performance and absolute maximum cross-platform compatibility.
FSF software is largely written in C, and they were the guys who published that document. It made sense in the 90's because C was one of the few cross platoform and highly efficient languages available at the time. Also, the C compiler GCC was and is the flag ship product of the FSF so of course they are going to push C.
That some people still push C for application programming is mostly because there are still a lot of old timers who aren't familiar with modern programming languages.
Anyway, if you need a standardized cross platform language these days you have many better choices. Python springs to mind. Java works as well, although I find the language design somewhat poorly thought out.
If you still need the performance benefits of C, you should use C++, which is actually faster than C due to the performance benefits of template programming. C++ provides higher level abstractions like object orientation, virtual functions, and templates.
Many people still use C over C++ due to the simplicity of the C syntax. C is easily learned compared to C++. This is a benefit; however, if you are a serious developer, you should just bite the bullet and learn C++, as it will make you more productive and allow you to write safer code by using smart pointers and stl containers.
That said, you should learn C as well, as it is still a useful language, especially when doing kernel space programming. There's no reason to write a non-embedded user space application in any language lower level than C++ though.
However, there are some real world reasons why people don't always prove their algorithms, and almost no one uses functional languages.
First, most programming problems in the real world are so intellectually tedious that proving the correctness of their algorithms would be waste of time. Many algorithms *should* be proven, but consider how much of you code is just boilerplate, and doesn't really do anything algorithmically interesting. Usually around 99%.
Second, functional programming doesn't allow state manipulation, so a lot of algorithms can't be done in them.
A lot of people will point you to lisp dialects such as scheme. Unfortunately, the *only* thing you will get from scheme is functional programming.
Another important concept that's actually very relevant to real world programmers is type safety. Generics, templates, etc, are inspired by languages like SML, and it's a good idea to try SML to get a feel for how type safety and genericism is supposed to work.
Also, you may notice at some point using SML, that type safe languages don't have null, which is something the guys who wrote Java were never told.
>>When you move to FP, all your algorithms break
>If moving to a functional programming language
>breaks your algorithms, then you are somehow
>doing it wrong. That line doesn't even make sense
>to me. Algorithms are mathematical constructs
>that have nothing to do with programming
>paradigm. Assuming the language is Turing
>complete, how is that even possible?
You are confused about the definition of an algorithm, and the significance of Turing completeness.
First of all, an algorithm is a *way* of doing things with an associated complexity specification (a mathematical description of how long it will take to run often denoted like O(n)).
Two turing equivalent machines don't necessarily support the same algorithms, although they will always have *equivalent* algorithms that get the same job done. HOWEVER, those algorithms don't necessarily have the same complexity. For instance, on turing machine A a sort might be done in O(n^2) while on turing machine B a sort can only be done in O(n^3).
To be functional means to be stateless. If you don't have state, then all sorts of algorithms become much more expensive. Notably, it's impossible to do a quicksort in a functional language, although other less efficient sorts may be done. Some people respond to that by saying that you can just buy a faster computer if you want to run functional algorithms; however, anyone with a decent computer science education knows that this can't solve differences in assymtotic complexity.
NOTE: quicksort (which cannot be done functionally) does not have better worst case (big O notation) complexity than mergesort (with can be done functionally), but it does have best average case and takes advantage of the underlying machine implementation much better. In some ways it is a bad example, but most people are familiar with sorting, whereas few people are familiar with dynamic algorithms.
The reason that functional programming languages exists goes back to Church and Turing. Church invented lambda calculus, and Turing invented Turing machines. Both are computationally equivalent in their power.
Turing machines have state, and are essentially a description of a hypothetical machine. Lambda calculus, is well, a calculus. It is functional in nature and has no state.
Not surprisingly, real world computers look more like turing machines than they do Lambda calculus evaluating machines. Also, virtually all programming languages are built around state manipulation, since that's what the underlying hardware has to do.
The idea of a functional programming language is to emulate the lambda calculus on a rough approximation of a Turing machine. Technically it's possible for any Turing equivalent machine to emulate any other. However, since the two machines are so different, this makes things dog slow. Again, faster computers don't solve this problem because there is an assymtotic difference in complexity, not a constant factor difference.