Hear hear. Bill Gates is trying to kill malaria. He doesn't care about having the biggest number next to his name when he dies. He wants to be the guy who's known for killing hunger in Africa.
For some reason, when I started my software engineering career I got it into my head that I needed to learn as much as I could about programming languages.
I learned ruby, perl5, python, lisp, forth, ml, ocaml, scheme, haskell, r, c#, java, lua, c++, factor, idris, asm, erlang, prolog, rust, d. But that wasn't quite enough because haskell and idris kept on talking about complicated type theory stuff. So I also learned lambda calculus, type theory, set theory, domain theory, topology, category theory, information theory, sub-structural logic.
What I'm trying to say is that I'm not afraid of learning new things. Even if they seem hard or esoteric.
When I heard that perl6 was ready, I took a look. I like the idea of a lot of what is present in the language (hey look, a grammar engine, that's neat). But ultimately, I decided that it was too much stuff that I would have to learn. Maybe that's just a perception problem on my part, but I have to think that they have some sort of problem if someone like me feels overwhelmed by all of the things that you have to grok in order to understand the language.
> So basically you're saying that it is a preferred solution to teach kids math poorly, let them develop insecurity and aversion towards it and then spent a lot of money to let them overcome it than just do it right in the first place?
Yeah, I know that's not what you mean, but you're missing a point.
If you knew it's not what they meant then why did you start off saying that's what they meant? If you thought they were missing the point why didn't you just say that?
I really like type systems. I think that if you take the time to learn about type theory, then you are more likely to create better solutions (both with code and in life in general).
However, it isn't free. Type theory is a kind of math that most people have very little exposure to, so there's going to be a lot of work in order to start becoming proficient.
Additionally, there's more than one type of type theory. Are you using a system F like system? Are you going to have sub-typing? Is it going to be structural sub-typing? Maybe you want row polymorphism. Is there going to be a kind system? What about higher order poly kinds? Dependent typing? Intensional or extensional?
Additionally, there's more than one type of implementation of these type systems. Ocaml functors ... is it a generative or applicative functor? Haskell ... are you using gadts, functional dependencies, or type families?
In the end I think that type systems will eventually be able to get you a completely typed experience that feels exactly like a completely dynamic experience, but with compile and design time checks that always make you feel good about the experience. However, I don't think we are quite there yet and I don't think you can expect everyone to be able to take the time to get sufficiently familiar with an arbitrary type system in order to be productive with it.
I'm not sure, but I remember seeing some research into using it for Haskell stream fusion (can't find the video, sorry).
I believe that the basic idea was that not all rewrites end up being equally fast ( a * b * c can be fused into ab * c, but maybe a * bc is faster). Trying all the combinations is an option in theory, but you get a combinatorial explosion so you normally dont get far in practice. Enter machine learning. I'm not sure how successful they were, but I imagine that the same sort of thing could be applied to SIMD.
Yeah, I like the way you're going. I haven't spent much time thinking about how to fit in software engineering, but I did try to think about how to structure programming issues (which is probably the first step if you want to eventually get to a software engineering).
It's missing a conclusion / wrapping it all up (which hopefully I can get to soonish), but is otherwise mostly done. [I should probably augment it with motivations and examples.] I'm not sure that this is the definitive answer, but more like this is my attempt to structure some of the things I've been encountering.
EDIT: Sorry about the length. I'm not sure there's a good way to shorten these sorts of ideas.
Checkout the generic formula for any number of dimensions [1]. The function in the denominator is a factorial (except extended to work on decimals instead of just integers). The functions in the numerator are exponents.
Factorials grow much faster than exponents, so with an N-Ball we expect the "volume" to be small if we were to compare it to the corresponding hypercube when the dimension and when the diameter / length are all equal. After all we're comparing approximately diameter * R ^ D / D! and length * R ^ D. So if you put an N-Ball into a hypercube with length = diameter, what you'll discover is that the N-Ball is tiny when compared to the hypercube. Which means we have the weird and counter intuitive conclusion that all the "volume" of a hypercube is in the corners. Try calculating the volumes yourself using a high dimension like 100. Even better plug the whole thing into a script so you can generate a table and see the effect get progressively worse as you increase the dimension count.
There is also a similar effect on the N-Ball itself. Imagine drawing a smaller circle inside of a circle where their centers are the same such that the inner circle contains exactly half of the area of the outer circle. Now imagine doing this in a sphere. Now a 4D sphere. Now a 5D sphere. What you'll find is that as you increase the dimension count, the radius of the inner circle will get longer and longer. Which means that half of the "volume" of an N-Ball slowly moves closer and closer to the outer edge of the N-Ball as you increase dimensions.
Here's the punch line. Imagine that the N-Ball represents all there is to know about a topic. You begin in the center of the N-Ball and in order to learn more you have to walk to the outer edge of the N-Ball. Also imagine that you're only able to see what's right in front of your face. In the beginning at the center there is very little volume to look at. It will appear to be easy to understand what's going on. But as you walk to the edge of the N-Ball, the amount of volume that you're able to see increases. When you get right to the edge of a very high dimension N-Ball you will notice that you only know half of what is available to know.
Simple topics are N-Balls with low dimensions. It's easy to "walk" your way to knowing half of everything there is to know. Complex topics are N-Balls with high dimensions. Programming (and by extension software engineering) is really high dimensional. The more you learn the more you notice there is to learn. When you walk to the edge of what seems possible you find yourself swimming in a sea that dwarfs you. But in the beginning it looks like there isn't really all that much going on.
If you're an explorer and you live in a small valley, then you will slowly begin to believe yourself a better explorer as time goes on. But one day you will get to the edge of the valley and look out onto a vast landscape and believe that you have become a worse explorer.
Checkout the volume of N-balls [1]. As the number of dimensions in a "sphere" become higher the "volume" of the sphere becomes smaller when you compare it to a hypercube of the same dimensional count. This is another way to saying that as the number of dimensions increases the closer the "halfway" point of the volume of the N-ball gets to the edge of the N-ball.
Programming (and software engineering by extension) involves a lot of orthogonal issues. We can imagine this so be a really high dimensional space. My theory is that whenever you're in situation that can be represented by a high dimensional space you will learn a bit of knowledge and think you know something. Then you'll learn a bit more and discover there's more to learn. The more you learn the farther the horizon moves away. It will feel like you're getting worse. Just like finding out you live in a valley.
What's really happening though is that your increase in skill is allowing you to realize how small your world was all along. Keep learning and trying and you'll get better. It will however, take a while.
I spent a couple years figuring out a certain problem. When I was done, it took me six months to be able to write up a blog series about it. I don't think autism has anything to do with it. Some problems are really hard to communicate.
I'm 30% through writing a 10-20K word blog series about something that I've been working on for the last 6-8 years. I've probably written ~5K words already on blogs unrelated to my series where I'm kicking around the ideas that went into my project. Finally, the project probably isn't that interesting unless you've encountered a very specific type of problem before. Which means I probably should put in another 5-10K words to market it.
Sometimes it's not about confidence. Sometimes it's about complex social dynamics and how people react to suddenly being thrown into the deep end of a domain that's completely new to them.
"Tell me about a technical challenge that won't make me feel inadequate or be difficult to follow. Don't make it too simple though because then I'll think you're an idiot."
Apparently washing your hands also causes you to be more lenient.
So AI probably shouldn't be used for sentencing, but that's more to do with all the stakeholders being clueless about the technology. The people asking for it, paying for it, using it, and building it (hey I can just throw some packages together in R right?) don't know what they're doing and are using it to significantly impact the lives of others.
On the other hand, pretending an arbitrary Judge / Jury / sentencing guidelines also don't form a dynamic system with not well understood effects that's equivalent to random AI in terms of output doesn't exactly help anyone either.
At the end of the day you need people who are honorable who you can trust to do the right thing (as much as it sounds like a saturday morning cartoon).
Cross pollination of disciplines also seems to bring out great ideas, which makes your (obviously first) proposal sound even better.
Unfortunately, I feel this is similar to that one dessert on the front page of the menu at an expensive restaurant. It looks delicious and tastes even better, but as soon as the bill comes you wondered what in the world you were thinking.
I would be really interested in someone elaborating on this idea "phd is an apprenticeship for researchers".
Several people have insisted that I should go into a phd program, but when I looked into it I saw a lot of: learn how to do grant applications, publish this non-reproducible and barely significant result just so you have something published, work on a phd adviser's bad idea so he can take the credit, etc.
If you're working on an idea no one has had before, what kinds of support can others give you and do modern phd programs give that support?
You're right I think, but what's actually interesting (I think at least) is that time in the gym is more likely to make you a significant social member of a certain group (gym => office, lab, bar, etc).
Time spent present is easy for the social group to measure. Everyone might be impressed by the guy running the 4 minute mile, but after he leaves we're much more interested in Greg improving from his 7 minute mile to a 6:30 minute mile and that 4 minute mile guy was kind of a jerk anyways. Finding a way to get a 4 minute mile without the trackmaster 2000 and the protein shakes, who does he think he is.
I would be interested in some sort of elaboration or source citing here. For example what do you mean by "design". Ants aren't exactly encoding anything into silicon or filling books with mathematics. Can you qualify what you're trying to say?
Just read On Lisp and find a primer on Scheme macros. Then if you're still interested read Let Over Lambda. Few languages do macros like lisp, so it's worth looking at the macros to understand a new concept. Besides that, though, I don't think lisp has anything world shaking.
Also if you happen to like what you see in macros, try also checking out parsing words from forth or factor.
Joel on Software Story about Bill Gates: https://www.joelonsoftware.com/2006/06/16/my-first-billg-rev...
Bonus Bill Gates Pancake Problem story: http://www.npr.org/templates/story/story.php?storyId=9223678...