This is why smart people rarely build businesses
Jensen Huang stood in front of a room of Stanford graduates and told them he hopes they suffer.
He wasn't being cruel. He was being precise.
His argument: people with very high expectations have very low resilience. And resilience, not intelligence, is what decides who actually makes it. A Stanford grad has spent their whole life as the smartest person in the room. They've rarely been tested by real failure. So when something finally breaks, they break with it.
Then he said the line every founder should sit with: "Greatness is not intelligence. Greatness comes from character. And character isn't formed out of smart people, it's formed out of people who suffered."
He would know. At nine, Huang was scrubbing toilets at a Kentucky boarding school his family hadn't realized was a reform school. As a teenager he bussed tables at Denny's. In 1993 he started NVIDIA in a Denny's booth, and nearly lost it more than once in the years that followed. The character was built decades before the valuation showed up.
This is why he uses the words "pain and suffering" inside NVIDIA with what he calls great glee. He isn't trying to shield his best people from the hard part. He's trying to give it to them on purpose.
Talent gets you into the room. The people who stay are the ones who were broken once and learned they could rebuild.
This webinar builds on the AI Software Factory demonstrations we have already done. Next up is measurement: throughput, DORA metrics, and forecasting.
June 2 | 2 PM CDT
Check out the webinar: https://t.co/0tP4b3qqRC
#AISoftwareFactory#DevOps
Programming has nothing much to do with math. It is primarily about communication. It's about us communicating with customers and us communicating with the machine. Programming is a language skill, not a mathematical one.
Consequently, I get tired of people claiming that programming has anything to do with math. Beyond a little set theory and statistics, I've never used any real math in my decades of programming work. Logic is a subdiscipline of rhetoric, not mathematics. Analytical thinking (and problem solving) is part of almost every human activity, from carpentry to oil painting. Math and programming both use those skills, but so do a million other disciplines.
Some programs implement problems in mathematical domains, but in those cases, the math is part of the domain, not the programming process. Some programs involve dating profiles, but that doesn't mean that dating profiles are an integral part of the programming process.
I think this false equivalence dates back to the very early days of computing, when computers were used almost entirely to solve mathematical problems. In the present, mathematical problems are only a tiny fraction of the problems we solve.
Of course, computer science, which is that branch of mathematics concerned with the analysis of computer programs and algorithms, uses some math. (Though I never used the required 1.5 years of calculus and differential equations in a single CS class.) I'm talking about programming, not computer science, however.
So, returning to my original claim, if you want to be a good programmer, focus on developing communication skills. Math is irrelevant to the vast majority of us.
Tim Ottinger posted this drawing over on LinkedIn 👇 [https://t.co/NtIzo3QOKH]. He's absolutely correct about this.
Here's an example: I once built what amounted to a small blog system that had a comments feature. My initial idea was a standard comments dashboard. When somebody made a comment, it would go onto the dashboard, and then I'd send an email out asking for approval. A link in the email got you to the dashboard. Google Groups works exactly that way.
Then I started building. I like to keep early versions as simple as possible, so my first version skipped the dashboard entirely and sent an email with an "approve" link in it. If I didn't get an approval within a few days, I deleted the comment.
I released that.
Nobody complained. Nobody asked for a dashboard. A link in the email was just fine.
So, I was finished. There was no need to create that complicated dashboard at all, given that everybody was happy. Nobody ever requested a dashboard, but if they had, I would have added it at that point.
Here's another example:
When I build microservices, I take the notion seriously that the service should be fully self-contained with impermeable boundaries and no dependencies on anything external. That principle means that every microservice must have its own data store. There is no shared database in the system. (This is standard microservice architecture, described in a myriad books—please read one of those before you argue with me about how crazy I am. Many thousands of microservice systems don't have a shared database.)
Version one of my services often uses the simplest data store possible: everything is in memory. No SQL. No serialization. Just a collection (usually JSON in a key/value dictionary).
So, once I've deployed that and proven to myself that the business logic is working, I often (not always) add persistence by serializing to a local file on the disk using the easiest mechanisms available. Usually, that's not any official serialization system—I just create a flat file with those key/value pairs in it.
Often, I'll stop at that point. If the key/value pairs are working, there's no point in doing anything fancier. In any event, seems like bringing in an SQL server to handle a database with one table and a couple of columns is way more trouble than it's worth.
So, the lesson here is: (1) work incrementally in very small batches; (2) build the simplest possible thing; (3) if absolutely necessary, add a bit more, but again, build the simplest possible thing; (4) don't futureproof—if the current thing is good enough, stop.
In Africa, only 24% of new workers find good quality, wage-paying jobs. Why aren't businesses able to generate quality jobs, and how can we change that? @WorldBankAfrica’s Chief Economist, Andrew Dabalen, explains: https://t.co/dEk3jgn9dZ #AfricasPulse
Domain expertise, math, coding, and communication.
- Domain expertise to identify an important problem and envision a solution.
- Math and coding to build it.
- Communication to deliver it.