I disagree with this slightly. I wasn’t “relentlessly resourceful” when I started my first startup — but I was, and am, a very stubborn determined person. When I start pounding my head against a problem, I don’t stop until either the problem breaks or my head does. So far, it has always been the problem.
(Well, almost always. There was one project that I knew was mathematically impossible even before I started it. But the six months I spent on it gave me a good feel for the math involved, and made me a noticeably better programmer, so I consider it time well spent anyway.)
So, instead of your head breaking, it grew to understand the problem. 🙂
BTW, your determined nature is something I’ve always respected (and sometimes envied) about you!
My parents didn’t appreciate it very much, as you can imagine. 🙂 They knew the “best” way for me to get ahead in life: go to college, get a secure job with a big company (or, after the eighties, a government agency), and give them half of my waking life until I was too old to be useful. They couldn’t understand how an otherwise smart and logical child could disagree with that plan. But even my mother finally admitted that I did quite well by going my own way, though it took her more than thirty years to do so.
🙂
Could you reveal some details about the project that involved math. I am eager to know two things
What math lessons you learned doing the project and
What math lessons should a programmer take to be better at his job ( could you hint few online resources/books etc ).
Thanks.
-Arvind
The project was lossless compression of already-compressed data, which is known to be mathematically impossible. The math lesson I learned from it was exactly why it’s impossible… I can’t exactly explain it myself, but it led me to Claude Shannon’s information theory papers, and a much greater understanding of probabilities.
As for math lessons that a programmer should take: don’t. Certain areas of programming require specific mathematical skills (3D graphics programming will benefit from a background in basic trigonometry, for example), but outside of those areas, you won’t use much mathematical knowledge in programming. You can learn specific disciplines when you need them.
(There’s one notable exception to that, though: understanding programming papers will require an understanding of some of the Greek symbols used in math. I missed out on those in my formal schooling, which I found extremely frustrating. Especially as, without knowing the English names of the symbols, I couldn’t look them up through search engines and teach myself what they meant. I finally found them on this page.)
In general, the only thing that makes a programmer better is more programming. Work on personal projects, or open-source projects if you can’t think of any for yourself. Try to work on different kinds of projects too, so you’ll get a wide variety of experience, and get more experienced programmers to look at what you’ve done and suggest ways to improve it. A year or two of that is enough to put you ahead of anyone without it.
As far as online resources, the best one by far is Stack Overflow. There’s a list of other good online beginner-programming resources in this question; for more advanced stuff, you’ll want to look for items specific to the kind of programming you do, or the language you prefer to use.
I hope that helps! 🙂