As far as wired networks/desktop hardware goes, I find that things Just Work(tm). Laptops, yeah. You do need to google, or buy with Linux preinstalled. thankfully, there are more and more places that sell Linux laptops these days.
726 karma · joined April 12, 2008
As far as wired networks/desktop hardware goes, I find that things Just Work(tm). Laptops, yeah. You do need to google, or buy with Linux preinstalled. thankfully, there are more and more places that sell Linux laptops these days.
Really? All the mail clients I can think of off the top of my head have at least threading and urgency flags. While I can think of some improvements, I don't think that there's anything significantly better out there for managing large volumes of incoming information.
It doesn't take any effort to get Linux working on hardware that it claims to support. In fact, I find it far easier to get Linux working on supported hardware than Windows; the install is far smoother, there are no drivers to hunt down after the install, and the software that I care about is 90% preinstalled. the last 10% is just a click in a nice GUI away, and I don't have to search around the internet for a reliable source to download from.
I remember reading about a US research project where someone with reasonable physics knowledge, but no specific knowledge on the workings of atomic bombs, managed to put together viable plans for a bomb from only publically available information.
People are stupid, but they're not (usually) deliberately self-destructive.
No, it's not as easy. It's possible to make it perform much better, though, through micro-optimization of the specific operations needed.
It's similar to doing a problem in assembly. On the macro level, it takes far less effort to make a performant system in a high level language, however for simple algorithms that are commonly used, you can typically get a threefold speed improvement by doing them in assembly, for a significant increase in implementation effort.
Wow, I never thought I'd compare Java to assembly.
Sure, you'll fail often. Occasionally you'll fail hard. Get up, dust yourself off, decide whether it's worth trying again, and move on. Even failing at something worthwhile will make you a better person than not having tried at all.
Fear of being labelled a failure is a horrible thing.
Besides unhiding the hidden costs, I'm not sure that more government intervention would be a good thing, but I know for a fact that I'm not qualified enough to suggest solutions.
Now, this breaks down if:
- There are externalities
- The consumers are uneducated and uncritical
- There is a monopolyIt's not like mechanical engineers spend the majority of their time deciding on the trim and positioning of internals which compose the interface to the car. Instead they collaborate with the designers the constraints on the interior layout, and then they leave the interface details to the designers, while working on the drivetrain, suspension, frame, and so on.
The point I'm making isn't that GUIs are unimportant. The point is that GUIs are uninteresting if you are looking for a technically challenging problem to solve with code. This lack of challenge can be compounded today with the trend towards designers providing specs to programmers, and then leaving the programmers to implement it, as the creative element is reduced.
The same is true about web interfaces, of course, but they at least have hype behind them, and therefore they're picked up by trendy young coders. Plus, there's the challenge -- or, IMO, endless pain -- of actually making it work across multiple browsers.
There is certainly an art to making a good, usable interface, but it's not a typical programmer's challenge, and writing a UI by hand is simply a pain in the ass. It sucks to do the stupid connections and packing if you don't have a drag and drop layout tool. And once you have that, you start leaving the programmer's domain, and into the designer's domain.
Note, I'm only talking about interfaces. The logic behind them can be anything, but it's the same logic with a web or desktop frontend.
I think it's just that once the shine wore off of the "hey, I can make buttons!" thing, the highly motivated programmers realized that UI design wasn't something that they wanted to focus on -- it's better left to designers (in theory at least -- im reality it's probably left to lowly grunt programmers) who can make the UI with drag and drop GUI builders, leaving them to work on interesting technical challenges. Making a GUI tends to be incidental to the core of the problem. I suspect that if it wasn't for the shine factor in web apps, it would have the exact same sort of apathy that you see in most programmers about desktop GUIs.
On the other hand, starting a comany is something you can do at almost any time, including after you graduate. If you don't have a burning passion for a specific idea, don't drop out of school for it now.
It sounds like you don't know for sure what you want to work on if you drop out, and you just want to start a business. I suggest you stick it out with school and then go for your idea. If you know exactly what you want to do with a startup, then it's a tougher choice. I'd still lean towards staying in school and finishing your degree, depending on how far you are from graduation, though.
You can definitely increase your ability. I don't think that's necessarily the same as changing your intelligence. I think the derivative of ability may be intelligence though -- ie, the rate at which you can increase your mental ability, as opposed to the level of ability. I also think that the increase in ability is probably asymptotic, and intelligence could affect the point at which it becomes extremely difficult to increase your ability.
That has nothing to do with what I said. If you want to avoid the peak memory overhead of using a GC (and the peak memory overhead is quite a bit higher if you don't want to kill performance -- you'd need to run the GC after every statement that could possibly kill garbage otherwise), you need to use C or C++.
And as for other mobile platforms -- Windows Mobile allows C++, IPhone is in Objective-C, Symbian is C++, etc. Java is popular, but it's not overwhelmingly so. And this is even taking into account that it's easier to get a Java based device approved by carriers/regulators because the VM can trap more attempts to break the OS and thus make sure that you can't trick the software into doing out-of-spec stuff.
GC is a wonderful tool. it prevents leaks, but it needs more memory when you're rapidly generating garbage. I wouldn't want to program without it... unless I'm trying to shoehorn things onto a tiny system.
Just to extend your point -- Most commercial compilers (GCC, for example, or Clang, among others) use hand-written recursive-decent parsers instead of parser-generators
There are some things C or C++ are just better at, like operating in a low-memory environment when you want to squeeze as much as possible out of the system. Sure, GC is nice and all, but for things to work well with a modern copying generational GC, you need 2 or 3 times the amount of RAM as an equivalent manually managed tool, because collection is lazy and you don't want to run it on every allocation -- that would be too expensive. So garbage sticks around for a little while.
Alternatively, some people like writing in high-level compiled languages (most of which are faster than Java) like OCaml or Haskell, both of which are suitable for a device that would also be running Java.