Exactly :) I come from a .net background, where compile times are kinda bad compared to what I get in C. I had also heard of big C++ projects that could take more than 30 mins to build. So I was always scared to move to native code. Until I learned the single compilation unit trick! And if compile times were to get slow again, there are many more ways to bring it down even further,
I tend to use a single compilation unit, and use plain C. For a 50k line project I have build times of 1-1.2sec. On top of that I'm also linking to opengl, windows.h and a couple of headers in the standard lib.
Despite what the code may look like, they all have a very easy to use API. Take stb_image.h for example. Most people need just two functions, stbi_load(), which loads any supported image format to a byte array. And stbi_image_free(), which frees the data.
But if you need anything more than that it's all there. e.g. loading from memory, loading via callbacks, support for HDR images, support for custom allocators, preprocessor flags let you exclude code for unused image formats, etc etc
Increasingly popular are the "single header libraries", which were popularised by Sean Barrett[0]. It's as simple as downloading the header, putting it somewhere in your tree and #including it where you need it. It's especially useful for redistributing libraries, but I've also found it useful to create these in my own projects.
Firefox has more than a 4% market share[0][1]. One of the main reasons I've heard, is that it's free, and that the Mozilla Foundation is a non-profit.
I also just found this bit, that explains how some browsers might be over or under estimated, because of how their internals work[2]. So we really don't know what the market shares really are.
My biggest gripe with OOP is the Oriented part. If you design your entire codebase around OOP you will run into architectural problems. Especially with so-called Cross Cutting Concerns[0]. The way I tend to write code, is to just start with my main function and write whatever procedural code I need to solve my problem. If I start seeing patterns, in my data or algorithms, that's when I start pulling things out. I have heard this approach being called "Compression Oriented Programming", but I don't care much for what people want to call it.
This approach doesn't mean no objects ever. But only when your problem actually calls for it. Likewise you will also end up with parts that are purely functional, data-oriented, etc. But they will be used where they make sense.
On top of that I'm also using pure C99. It does away with a lot of the fluff and cruft in other languages. In the past I used to try to fit my problems into whatever the most fancy language features I was offered. Which cost me a lot of time analysing. Now I just solve my problem.
Mind you, C is not a perfect language. There are features I wish it had. But for my approach to programming it is the most sensible to use. Apart from maybe a limited subset of C++ (such as function overloading and operator overloading for some math)
The most surprising detail to me was how much water they have to drain out of the metro each day:
"As a result, he said, they “discharge approximately 2-million gallons of water a day.” In other words: about three Olympic sized swimming pools worth."
Here are some personal thoughts in no particular order:
- Most people are bound to be about average, that's how averages work. In life you've probably been through a couple of "selection procedures" (for lack of a better term) that redefine this average for you personally. Very early in life, the average is low. People with an intellectual disability get "filtered out" and end up in special care, and the average rises. After primary school (and I'm basing myself off of the Belgian school system, which I'm most familiar with), you start specialising. Some people choose a very hands on education (woodworking, mechanic, etc.) which doesn't require the same intellectual capabilities as, what we call, general education (lots of science, Latin, Greek, etc.). The average changes. Then you might go to higher education and choose between high school or university. The average changes. I hope you get the point by now: depending on how good (and I've focused purely on intellectual capability, you might focus on another quality) you are, you will find a very high or very low average. Whatever path people choose, they are bound to be around the about average in their path.
- Something that fits quite well with the previous point, is how high you've set your personal standard. I'm not here to tell you whether or not your standard is too high or too low, you have to decide that for yourself. But consider that someone aiming to be a top theoretical physicist is going to have a much harder time achieving his standard than someone aiming to have a family, dog and house, without struggling financially. This person is again going to have a much harder time achieving their standard, compared to someone living in a poor village in Africa, just wanting to not be starving. (And you might argue that person in Africa will have a much harder time not starving than an average male white American getting a house with a family and a dog, but that's besides the point)
- Keep this standard higher than your current personal level. It will keep you wanting to become better at whatever you're doing. But keep it realistic, that will prevent you from becoming hopeless about never reaching a certain standard.
- Just because people tell you you should be happy for not being that starving person in Africa, doesn't mean they're right. They're not entirely wrong either; there are people who have it a lot worse than you'll ever have. But someone else's struggles and troubles do not negate your own.
- There's also something that's known as selection bias[0]. This fits quite nicely with point one and two. Because of the standard you've chosen for yourself or the average you've ended up comparing against, you will have a tendency to see all the people doing better than you, and ignoring those doing worse than you. Again, this doesn't mean your struggle is irrelevant. It's just something to keep in mind when comparing yourself against others.
- But then again, is there any point in comparing yourself against others? A nihilist[1] might say it doesn't matter what you do in your life. That there is no inherent value to anything you do or achieve. That there is no particular meaning to life. Maybe you can find yourself in this reasoning?
- Think about relocating. Paying those college fees might not have been hard in Belgium. Up until this academic year, higher education cost about 650-700 Euro per year. Even less if your household earns less than a certain amount. Fees as low as 150 Euro are possible for a year of higher education.
- A silly example from my own life, incorporating some points I previously made: Take a look at my English. I wasn't born in an English-speaking country, never lived in one either. I think there is still a lot to be improved about my English. But compare my English to what you might see in the comments on certain websites. Is my English really that bad (especially when keeping in mind it's not my mother tongue). Then compare my English to what you might see in a work of Shakespeare. Is it even worth learning more if I'll never reach that level of English? But in the end: does it even matter how good my English is, as long as I can get my point across?
If it behaves like RAM, from the POV of the OS, I'd imagine the advantage to be the large size. There's also the fact that it won't lose its data on power loss.
Of course, if it behaves like a regular SSD, the read speeds still exceed SATA3.0 speed.
Here is a live map: http://quakes.globalincidentmap.com/
Though I'm not sure how accurate it is, it only shows two earthquakes in Iceland in the last two days for example.