I've yet to see a competently written math book. Most of them are written by and for people with PhDs in mathematics.
Sounds about right - as a programmer, I've always been appalled by how math is taught. If we taught programming the way we taught math, every program would be unmaintainable. Think about it:
- One letter identifiers for everything. Algebra teaches you to always use x, y, z for variable names. Calculus teaches you to do it for function names. If you run out of those, use greek letters, or just start making up symbols. - Everything is named after who discovered it, not what it does. Pythagoras's theorem, Newton's method, L'hopital's theorem, Cartesian co-ordinates, Euler's number... - Formulas are always crammed into a single line, without being spaced out. And without any in-line comments. You're forced to try and understand the entire formula in one shot, rather than piece by piece.
MatLab is a perfect example of why mathematicians shouldn't program. You can look at the source to certain functions (like calculating Euler's number) to see this in action.
I disagree with much of this. Naming things after discoverers is no worse than what's going on now with names for important libraries, frameworks, or products. Why should I make celery part of my architecture? I like tomatoes better anyway. Single-letter symbols can be confusing when used to denote specific things, but when applies to abstractions, computer science does the same thing. A good example of the latter is the contrast between common style conventions for Java class names as opposed to generics arguments. In mathematics, especially applied mathematics like engineering, more concrete variables are often given subscripts or longer variable symbols. Here's a good example.
Interesting point. My organization is probably neither on the forefront nor stuck in the past when it comes to enterprise architecture and development process. But what I'm witnessing is a desire to empower teams while maintaining a coherent operations structure. We want the best of both worlds -- flexible resource allocation and scaling, yet individualized development environments designed to fulfill needs of teams focused on specific areas of the whole enterprise before getting their stuff to a bigger integration point. Going ever deeper down the VM rabbit hole is how we plan to do it.
Not all organizations have the same needs, but this additional tier of virtualization is an interesting proposition. On the one hand, it has a lot of potential. On the other hand, we are already struggling to understand what goes on in our production environment during critical performance times or when troubleshooting complex problems or incidents. Are we overengineering it? Time will tell.
There are kids today going to middleschools around this country who can't read. There are kids today going to school. For free. And whether or not they meet the acadamic standards we expect from them - FWIW, "can't read at grade level" doesn't mean the same thing as "can't read" - We have very close to a zero illiteracy rate among legal citizens in the US, a quality unprecedented in human history and only even matched by a handful of countries today.
I suppose a lot depends on your definition of illiteracy. When I said "can't read", I meant "can't read". As in, cannot make sense of a paragraph of text and the school system is not going to help them. I know this because I work in the education industry and my wife is a teacher herself. We're not talking about "doesn't meet grade standard". We're talking about generations of kids leaving each successive grade further away from being able to succeed, nay function, in society and the schools still pouring all resources into additional assessing of kids without additional teaching. Was this your experience in school? It wasn't mine. Because I was fortunate enough to have been shielded from those schools by adults in my life who put me on a different path and made sure I stayed there. We're not talking about better schools and worse schools. We're talking about hundreds of thousands of forgotten kids without a future. If you want to compare that with the Middle Ages and say that our job is done, I call BS. People are suffering, so our job is not done. And what used to exist even less than a century ago, was a network of personal training through apprenticeships that all but guaranteed some decent living standard. This does not exist anymore.
please don't pretend that you understand the hardships of others from behind a lawnmower. I see you missed that at self-debasing humor, despite the winking smiley. Yes, I have it easy. I know that - Pretty much my entire point. We all have it easy. Even the homeless guy living beneath the overpass (an overpass! The luxury, he has a roof over his head covering a few thousand square feet!), thanks to our society of consume-and-dispose, has no shortage of goods and even money - Not only can he afford to eat, but drug overdose counts as the leading cause of death among the homeless! You bought any illegal drugs lately? They ain't cheap.
No, we don't all have it easy. Some of us do. You're speculating about the rest despite your smiley. Ever worked a minimum wage job for 60 hours a week outdoors without additional prospects? Ever got sick and couldn't do anything about it? Ever live with constant fear of the next day?
I don't claim everyone has it as easy as a white middle class DINK living in the burbs. Not everyone can afford a house and a family and more toys than they can keep out of storage at a time. But getting the necessities to stay alive has never come any easier.
Is that the bar you'd like to set for ourselves as a society? That we barely keep our destitute breathing?
Sure, we can debate and compare pros and cons of Google Docs and MS Office, but the really interesting conversation seems to be emerging about architecture and features:
- Who is responsible for storing and managing content?
- Who is responsible for managing the workflow around the content?
- What standards are needed and supported?
- Who are the content stakeholders beyond content producers?
- What are my budgetary constraints?
It seems that each of us figuring out the right solution for the task at hand should run through the above questions and arrive at something. It may end up being grabbing something off the shelf (free or otherwise, proprietary or open), it may mean building up a constellation of tools, or it may mean something heavily home-baked. Each approach can be valid depending on the circumstances. The world is still changing and organizations are still adapting. Sometimes low barrier to getting started on collaboration is important. Sometimes longevity of standards is important. Sometimes controlling presentation patterns is important. Etc, etc.
BTW, something was said about stylesheets and ODF-based tools not having that support. ODF supports XML-based stylesheets in terms of persistence. As far as GUI, LibreOffice and OpenOffice make it fairly easy to manage said styles. Making these styles interoperate with CSS (within reason) isn't terribly difficult. ODF being XML-based and truly open (unlike docx) is one of the main reasons I personally reach out for it more times than not.
This is quickly turning into yet another language holy war, but why not? It's fun.
I really cannot agree. Historically, one of the most common ways to pwn a machine was to exploit buffer overruns. Languages such as Ada and Java are virtually immune to that sort of exploit.
Sounds like you agree completely: Ada addressed a need in the 1980's that doesn't exist anymore; almost all our languages these days are type safe, and many have excellent static type systems that run rings around Ada's.
the amount of time and effort to make a secure, robust application is more or less independent of the programming language used. The difference lies in where you spend your time.
Here too you are pretty much saying what I'm saying: in statically typed languages, the compiler catches a lot of stuff for you, in dynamically typed languages you need to write more tests to achieve the same level of fault detection, and it ends up taking about the same amount of time overall. That means that statically typed languages are good for production but not prototyping, while dynamically typed languages are good for both prototyping and production, and furthermore let you transform a prototype into a production system gradually by adding tests. Anyway, use statically typed languages if you like, but Ada's static type system is really obsolete and unnecessarily cumbersome. (And please don't use "strong typing" when you mean "static typing".)
Having come from a long personal history with statically typed languages and then landed in a Python project (using it in a variety of ways and systems), I would say that while there's certainly a difference in workflow and approach, it's not as drastic as one might think. As much as people espouse Python's dynamic nature, ever more professional teams adhere to rigid principles that include lots of static analysis (unit testing, dedicated static analysis tools, REPL, etc.).
And at the same time, I saw lots of leaky abstractions and twisting of the type system by some of the frameworks, bleeding of run-time needed components into configuration and other artifacts not visible to the compiler and so on. And so conventions arise and the stack grows with ever more sophisticated frameworks.
The fact is, modern computing is both easier and harder. It's easier because we have amazing advances in hardware and software available to us. There are tons of libraries, frameworks, and components that can be put together in lots of interesting ways. Operationally, there are myriads of tools available as well. But it's also harder because making sense of it all isn't so simple and because the pace of development that is expected of us is higher too. Many organizations have built up a higher appetite for risk in dealing with the latest technologies in search of an edge. This isn't only typical of start-ups, as the pressure is on for everyone now. The next great database, analytics engine, server, framework, or language could come equally from Microsoft or Google, as well as from some unknown 17-year-old's home in Netherlands.
The principals of building successful systems now are rooted in computer science and good operational practices. Languages are important, but not the be-all-end-all of a team's success. Openness to alternative approaches and a willingness to look under the hood to understand what you're producing are equally important. Don't get me wrong, I love static analysis and compilers and good type systems are the place for it. It can be done elsewhere, but feels icky to me. But icky or not, it won't stop me from solving the problem at hand if I can help it.
He also couldn't get millions of books for free or get online education on just about any topic he chose. His home may have contained asbestos, his wooden furniture might have killed him, his food contained DDT, his waterways were polluted, and there was far more poverty and deprivation in his time.
While it seems clear that social programs cost money, their actual benefits aren't always so easy to ascertain. It's not so clear to me that American food industry is in any appreciable way better for the consumer. Yes, there are cheaper foods today than in the past, but it appears that "good" food is not accessible to many. What is accessible universally are foods that are pretty scary when you start following them to their source. Many people are choosing not to eat meats now due to questionable practices (not all illegal) of industrial farming. While it's not all bad and there are many aspects of this industry that have been improved, I wouldn't call this issue solved.
Yes, we have more people with health insurance today, but is this system working? Premiums are rising, while coverage is dwindling. We're attempting to intervene with legislation, but it's early days yet to tell how it'll play out in the end.
Poverty is an interesting concept. I've seen studies that show that we've collectively raised our expectations for what must constitute a minimum standard of living in this country. I won't attempt to delve into it myself, but certainly it's a very complicated question, one that stems from not just comparison of purchasing power over time. There is something to be said for "softer" metrics like sense of happiness, fulfillment, security, and realizing own potential. Again, I am not out to condemn the world we live in and put some abstract notion of the past I never personally witnessed as an ideal we've lost forever. I'm just saying it's a really difficult thing to analyze and solely focusing on money would be a mistake.
I think this shows that Google decompiled Sun's binaries. If you run a typical Java decompiler, you lose generics, local variable names; some initialization gets moved around; and certain things get inlined. Looks to me like there's evidence of all of the above coming across from Sun's source to Android.
Now, decompilation is a murky legal area I think. I guess it falls under the rubric of reverse-engineering, but I have no idea how that law handles such practices in this context. I suppose Oracle are operating with the knowledge that Google likely decompiled class files and have chosen to pursue the claimed that they copied the source. Is it because decompilation is harder to prove? Does it carry less legal weight than a straight copy or a near-copy? Hm...