I have no idea how to become the best programmer in the world. So I figured out the best way to get ahead is to learn from the all time greatest programmers and get responses from some amazing engineers too.
Let’s get cracking.
1. Lessons from Dennis Ritchie, the Man Behind the UNIX and C
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity — Dennis Ritchie
Back in the days before you could go to college and get a degree in computer programming, Dennis Ritchie managed to get a job working at the Massachusetts Institute of Technology (MIT).
Computer Labs were not as picky as they now are, and welcomed practically anyone with the patience to help them work on their room-sized computers.
For someone who started out as an industry outsider, creating both UNIX and the C language — two of the most widely used technologies in computer history — is a big deal. A very big deal.
Here are some of Dennis Ritchie’s accomplishments:
- Dennis Ritchie created the C programming language, and co-created the UNIX operating system with his buddy, Ken Thompson.
- In 1983 he was a recipient of the Turing Award from the Association of Computing Machinery(ACM)
- In 1990, both Ritchie and Thompson received the IEEE Richard W. Hamming Medal from the Institute of Electrical and Electronics Engineers (IEEE)
- In 1997 he was made a fellow of the Computer History Museum
- He received the National Medal of Technology from President Clinton in 1999
So how would you go about accomplishing all that? And more to the point, how did Dennis Ritchie even learn to write software?
Dennis Ritchie — popularly called the “Father of the C programming language” — was said to be a sweet, kind, unassuming man — and a complete geek!
But he didn’t start out as a geek.
Ritchie was born in New York and grew up in the Garden city, New Jersey. He had a stable childhood, and did well academically.
He went on to study at Harvard University, where he studied science and graduated with a bachelor’s degree in Physics.
So when did computers come into Ritchie’s Life?
POINT 1: If you look to be good at writing great software, you’re going to have to stay curious.
I am neither clever nor especially gifted. I am only very, very curious — Albert Einstein
Curiosity fuels the hunger for knowledge. And knowledge my dear, rules the world.
While a student, Ritchie somehow attended a lecture on how the Univac I worked.
The UNIVAC I (Universal Automated Computer I) was the first commercial computer produced in the United States.
Below is what it looked like:
Seriously, what kind of curiosity makes a person seat and actually enjoy a lecture on how that thing works?
Apparently, the kind that makes a great programmer.
After that encounter, Ritchie went on to further study how the computer really worked.
Curiosity kills the cat 🐱. We all know that, but you’re not a Cat.
POINT 2: I know you’ve heard this before, but Build stuffs. Lots of stuffs.
Instead of focusing on specific projects, I wanted to be around people with a lot of experience and ideas. So I started working on various projects to learn my way around the profession.” — Dennis Ritchie
Make building a lot of projects the product of your curiosity. Translate that curiosity into building different projects — and like Ritchie, this will help you learn your way around the profession.
POINT 3: Hang Around Those you Consider Better and More Experienced.
The obvious reason why you should do this is, you’ll be learning at a much faster pace and wouldn’t get too comfortable with your current knowledge.
This was something else Dennis Ritchie was said to do well.
If you can’t get physically close to the people you consider better and more experienced, the internet is your friend.
Follow them on channels you feel comfortable with. Read their blog posts. Watch their youtube videos. Listen to their podcasts.
Just “stay” around them.
POINT 4: Solve Problems.
“It’s not the actual programming that’s interesting. But it’s what you can accomplish with the end results that are important.” — Dennis Ritchie
Dennis Ritchie lived at a time when computers filled a room, and so did many more. But Ritchie knew that smaller computers were being developed, and they did not have easy to use operating systems, so he embarked on a project to build one.
This is how Ritchie viewed programming in general. It was about what could be accomplished. The problems that could be solved, and the effect they’d have on people.
If a problem bugs you so much, don’t ignore it. If you think it’s being overlooked by many, solve it. Build something. Just do it.
Get curious. Study the concepts. Ask for help.
You should not look back until you have solved the problem.
When something is important enough, you do it even if the odds are not in your favor — Elon Musk.
Here are some Examples :
- Quincy Larson and a couple others built the Freecodecamp platform to solve the problem of teaching web technologies in an open source community.
They saw a problem, and went on to solve it.
Key takeaways from the Dennis Ritchie, the Father of the C Programming Language
- Stay Curious, and keep fueling the fire of knowledge. We can never know all.
- Understand the fundamentals. The master of the basics, is the true master of the skill.
- Solve problems. If you think something can be done differently, and should be done, just do it. You’ll get better faster, and better lives while at it
- Build lots of different projects
- Hang around people with more expertise, experience and ideas. You can’t trade this for anything else.
2. Lessons from Linus Torvalds, the Man Behind the Linux Kernel OS
Named by Time magazine as the ‘one of the most influential people in the world, Linus Torvalds is the creative genius behind the Linux kernel operating system.
- In 1998, he was a recipient of the Electronic Frontier Foundation(EFF) Pioneer Award.
- In 1999, he was given the title of ‘one of the top 100 innovators, under the age of 35, in the world’ by MIT Technology Review TR100.
- In 2000, he was the recipient of the Lovelace Medal, which was conferred by the British Computer Society
- In 2008, he became an inductee into the Hall of Fellows of the Computer History Museum
- In 2012, he was inducted into the Internet Hall of Fame.
- In 2012, he was also one of the recipients of the Millennium Technology Prize.
Now, that’s worth some cool ride.
Born in Helsinki, 1969, and to a family of journalists, Linus says his childhood was nothing very special.
Influenced largely by his maternal grandfather, Linus wrote his first programs at 10, or technically, 12. He helped his grandfather type in his programs, and until age 12 did he start modifying them and writing his own programs.
If being a self taught programmer means teaching yourself to program, regardless of some basic rudimentary computer classes, Linus is equally a self-taught programmer.
According to him, “there were programming classes in high school at the time, but they were pretty basic and rudimentary”
Point 5: A formal Computer science education is great, but don’t let that stop you.
“Computer science education cannot make anybody an expert programmer any more than studying brushes and pigment can make somebody an expert painter.”
While growing up, Linus Torvalds found it interesting to write games, and he was doing machine code. He didn’t have access to an assembler, so he did all the assembly on paper and wrote them as binary.
That’s pretty badass.
What’s even more interesting is that everyone in his family (other than those from his maternal side) were journalists. He was the black sheep.
In his interview with the Computer History Museum, he says,
“I was very much a geek. I stayed inside and read or programmed. And quite frankly, I still read and sit in front of a computer. It’s my bobby”
POINT 6: Love What You do. Not Just the Money and Fame it Brings.
Most good programmers do programming not because they expect to get paid or get adulation by the public, but because it is fun to program — Linus Torvalds
I must state that, many times the love for programming doesn't come when you just start out. For many people, it is as an offshoot of mastering their craft.
You learn, make mistakes, build stuffs, see yourself get good, and you just totally love what you do then.
Even with those who start out with love, their love is seen to grow even more as they master their craft.
If you love programming but don’t seem to be improving, don’t give up. Most persons wore the same shoes — and in bigger sizes !
POINT 7: Be comfortable starting small — but grow.
“I just want to build my own Operating system” — Linus Torvalds???
That’s NOT how the story goes. The Linux project didn't start out as an adventure to build an operating system.
The details of it may bore you. But here’s the important bit.
Linus ordered a MINIX, essentially a UNIX-like computer Operating System (OS). It was first released in 1987, with its complete source code made available to universities for study in courses and research.
Linus played around the machine, and wrote his programs to boot off the floppy, with no OS.
Linus wanted to play with the CPU itself. So, using the OS would have defeated the purpose of his exercise.
Down the line, he didn’t find the program he wrote very useful. He then extended his program to the point where it was an operating system
Many successful people start small, but make it big.
The danger associated with starting big, is that you may fall into the trap of being overwhelmed.
Also, it is perfectly okay to NOT know something. Perfectly okay to be an amateur at a new technology, but grow your wings, and master it as quick as possible.
POINT 8: You must do the work. Nobody else will do it for you
And I had obviously been reading operating system books anyway — Linus Torvalds
I am yet to meet a successful man, who does no work.
It’s easy to assume that Linus just magically knew how to build an operating system. That’s not true.
He had put in the work required.
In his interview with the Computer History Museum, he says, he started working on trying to reorganize the program he built so it acted more like a real operating system. And he had obviously been reading operating system books too.
Nothing magical. You do have to put in the hours of work required to get good at programming.
Key takeaways from Linus Torvalds
- A computer science education is great, but don’t let that stop you from being great.
- Keep loving what you do. Keep doing it well, forget the adulation and money, they’ll come later.
- It is perfectly okay to start small. Just don’t remain there.
- Be prepared to put in the hours of work needed. Nothing amazing comes cheap
Bonus Points From Other Experienced Developers
I personally gathered inputs from some experienced software engineers. What do they think about being the best developer you can be?
POINT 9: Outwork Everyone Else Trying to be the Best
I reached out to him and here is what he said:
The basic answer is, to be the best at something you have to outwork everyone else who is also trying to be the best. That means code, read, learn, work at it every day and all the time. — Bill Sourour
In Bill’s words, a more interesting question might be, why do you want to be the BEST in THE WORLD? What will that get you? Is that the real goal?
How about trying to be the best that YOU CAN BE and not worrying about the rest of the world?
It still means working your ass off, but then you will only be competing against yourself. Make your goal every day, to be better than you were yesterday, and you will get very far.
POINT 10: Learn to Think About Abstractions and Software Design More Clearly
Dave Ceddia works as a software engineer in the Boston area, and his vast experience is one I’m come to respect over time. These days, he mostly builds frontend UIs with React and authored the book, Pure React
If you’re curious, here’s his blog
I reached out to Dave a couple months back, and the detail in his response baffled me.
Here are his thoughts:
1. At the right time, explore the advantages that come from being exposed to multiple programming languages
Learning multiple languages exposes you to new ideas and new ways of approaching problems (especially functional languages).
Then there are the lower-level ones like C that will teach you to be mindful of memory management and performance. You’ve got to build things, basically. Build lots of things.
2. Explore even more project types
Writing UI (User Interface) code is not like writing high-performance data acquisition code, is not like writing OpenGL code, is not like socket programming… So it’s interesting to branch out from one facet of development like frontend/backend stuff into other things, if only just to see what it’s like.
3. Gather a wide range of experience
So part of being a good developer to me is having a wide range of experiences. That might just be me though. Everyone will have their own answer for this. But I think it’s useful to know a little bit about everything.
I guess I’d call myself a generalist — I love learning new things, and so I’ve done lots of different stuff. Data acquisition code in C++ talking to custom hardware, GUIs in Qt, little games in OpenGL, boring Java and SQL, webapps in Ruby on Rails, little Raspberry Pi projects like a garage door opener… lots of little things.
4. Get great at Automation and Testing continually
Along the way, try to get good at automating things. I think a desire for automation has been the driver behind most of the projects I’ve done, but also, a great reason and motivator for learning Linux and the command line.
Command line knowledge seems like an ancillary, secondary thing. But I think it’s really important.
It changes how you see problems. Things like “oh crap I have to change that variable name across 30 files? nevermind…” become a few lines of bash.
Setting up builds becomes less intimidating because all the commands make sense, or at least you see the commonalities between them.
5. Understand Software Design
So the hardest thing for me about improving as a developer is the architecture bit.
Software design, how to structure your code so it’s reusable and easy to read and easy to modify. Getting great at refactoring and testing consistently.
I must admit I am not always great at testing. But TDD(Test driven development) is actually fun, and you should learn and practice it. I think it’s sort of a shortcut/system for getting better at the “design” side of developing software.
One of the best books I’ve read about design was Practical OO Design in Ruby by Sandi Metz . You don’t really have to know Ruby very well to get a lot of benefit out of it. It goes through refactoring a bunch of small examples to make them easier to maintain, and she discusses the tradeoffs and reasons behind every change she makes.
Where do you go from here? Apply these principles and begin your quest to become a better developer. Plus, you should endeavor to deliberately practice too.
In his recent Quora Session, DHH, Creator of Ruby on Rails, puts it this way.
“It doesn’t help to practice the same lesson 10 times over. You have to constantly seek the edge of your comfort zone. ” — David Hansson, Creator of Ruby on Rails.
Good luck, and cheers to being a better developer!
Do recommend the article, and drop your comments.
Any tips that have helped you personally? Let’s hear it!