With the rapid rise of technology and labor automation occurring in the workplace the need for programmers will only continue to increase as work transitions from manual tasks to writing code for robots, service line sensors for predictive maintenance, artificial intelligence systems, machine learning algorithms for big data, and other emerging technologies.
Even in non-coding professions having the ability to write scripts to automate daily tasks such as sending out emails for sales positions, checking for trends in the students of a teachers class, creating scripts to analyze the next weeks weather and adjust irrigation plans for a farmers crops, and countless other real world use cases will be extremely beneficial and will make someone’s resume more attractive then those unfamiliar with how to apply new technologies to your area of expertise.
Now that we know the why of programmer what are ways one can grow to be a more successful developer and programmer? Below are my top 10 ways that I’ve personally applied to go from a restaurant line cook to working at a top internet firm as a software engineer with over a six figure income.
I’d encourage everyone to bookmark this and read through it a few sections at a time as it ended up being a lot of information! I’m excited by the prospect of helping you grow your skills so please comment with any other questions or comments you have while reading through this. And remember to check out the BeAPythonDev facebook group to be a part of a community of motivated pythonic individuals interested in growing their software development and coding skills.
1. Realize that your mission is a challenging one
As with becoming successful in any field it requires self discipline to study the material, practice what you learn, and to accept failure when learning new concepts.
The first time you try to write your own code that sorts a list of numbers it may not work the first time, it might not even work the tenth time but if you have the perseverance to get it to work on your 20th attempt with your end goal in mind then you are well on your way to being a top tier programmer.
Also not having the opportunity to get a computer science degree for UC Berkeley, Cornell, or MIT should not stop you from believing you can’t get into a place like Google, Facebook, or some fresh new Virtual Reality startup as long as you have the drive and confidence to succeed in your mission.
“Sometimes it is the people no one can imagine anything of who do the things no one can imagine.”― Alan Turing
2. Learn some basics of computer science
While writing code there can be a lot of various implications you should understand of how your program effects the system it is running on. Here are some examples of some questions that a programmer deals with on a daily basis; How does your code affect the runtime and the memory usage of the program, how does it read and write its data, what else is also writing data to those systems? Are we using efficient data structures? Has this been solved by another developer or a third party library in a more efficiently way to be able to leverage reuse?
If you are writing a simple job that sends a text to 100 co-workers or does a simple moving average of the price of apple over the past two years then you’re likely in the clear to not worry about efficiency.
However if your code runs on a low cost phone with limited CPU ability and needs to do millisecond level processing on lots of real-time inputs such as speech recognition then using loops inside of a loop which does multi-threading in a brute-force way on shared memory is probably not code that you will want to be writing.
Understanding limitations of a system and your code and how to optimize each is an important part of growing as a developer and will come up in most coding interviews.
3. Read relentlessly
It is said that Warren Buffet reads 600 to 1000 pages a day and that Bill Gates tries to read 50 books a year and this is shared among all the most successful people. In short, knowledge is power, and the more you read and take in the more knowledge you have. As easy as it is to watch hours of reality TV and mindlessly disconnect after a stressful day this won’t help you reach your maximum potential.
Here’s some pointers from Bill Gates directly:
- Write notes in the margin – process what you read
- Don’t start what you can’t finish – priotitize what you read and pick what you’re interested in
- Paper books > EBooks – It’s easier to focus on a real book with less distractions
- Block out 1 hour times for reading – This helps you achieve better focus and make continual progress
These are a few books I personally recommend:
The story is that anyone can become a master of a skill with 10,000 hours of practice which breaks down to 3 hours a day for 10 years. It may sound like a lot but if you consider during your profession you will be growing this as well then if you are starting at the age of 20 by the age of 30 you should be able to achieve a senior developer position making a very significant income.
This effort can be increased substantially by using that time in a state of deliberate practice will honed focus on mastering algorithms, problem solving, and thinking through system designs for libraries and car washes if they were represented as a mobile app and a database to track customers. There are numerous platforms to help you achieve this practice such as leetcode.com and hackerrank.com. Make sure you push your solutions and learning projects up to https://github.com/ as well to keep track of your portfolio.
Another source of practicing is taking coding bootcamps and online courses that will provide certificates of your completion and are growing in reputation among tech firms as experience and knowledge among any source is just as good as acquiring it at university.
5. Crack the coding interview
Now that you’ve had time to study the basics of how computers run programs by executing instructions and addressing memory; and you can solve how to find all the prime numbers under 100 in 15 minutes of time it’s time to get that six figure tech salary.
To help achieve this first build up a Linked In profile or update an existing one and make sure to link to any certificates you have completed, your own coding blog, your github, or anything else that has shown your progress through the programming journey. With the demand for good programmers and aggressiveness of recruiters these days it is likely you will start getting inboxed about opportunities within a few weeks of making a stand-out profile.
Next, go out and network at different machine learning, ai, distributed computing meet-ups and conventions to get connected with someone that can help you get your foot in the door faster then blindly submitting your resumes. It’s been my experience that people in tech love helping other people in tech! If you’ve had some interesting conversation with an Uber engineer about applying self driving technology to customer transit and you’ve done a similar thing in a game course you’ve taken online, be sure to leave them your linked in or github information.
Then once you’ve had the chance to talk with the companies HR about the companies vision and available opportunities and have determined you would like to be a part of their culture you should work through the following book to help reinforce your prior learning.
6. Build high quality testable components
Congratulation you’ve cracked the interview! Or maybe you have previously cracked the interview and found this page in your search for growth.
Either way the next step should be to ensure that the projects you work on are corporate worthy. This means it is written with efficiency in mind for the problem you are trying to solve. The code is easy to read with descriptive variable and method names and has been laid out in a logical way such that people that read your code 5 years from now will be able to understand what your code is doing.
It should also be written into discrete, reusable, and testable functions. Such that you have a function that retrieve your data from a source, then you have another function that may take your data and do some transformation on it, then you can have another function that takes the transformed data and data from another source to fill a customer order. Then you would have unit tests written for this order_manager class with stubbed out representations of the data or dependencies to ensure the behavior of your code when other developers are adding code. Unit tests can also be run by new developers to your code to understand how your code runs simply and without ensuring all of the dependencies have been set up their system.
7. Be able to work self-guided
As you work on your team be aware of your teams focus and primary objectives. If you are a service team understand who the customers are and what their needs are. If you are a tooling team understand the systems you are building tools for and how the customers use those. Take in your teams architecture and how they manage their projects so that you can involve yourself in that progress and help define the tasks you would be interested in working on. As a new programmer transition to you a higher level engineer you should be able to know your teams software well enough to propose improved functionality to it or completely new projects that will be needed to solve a foreseeable scaling or process improvement problem.
8. Understand your business impact
To be a successful programmer involves more then just being good at writing code but also understanding the why of writing the code. If you know your code can save your team 200 manual hours a year and will take roughly 80 hours to write then that is something worth considering proposing. However if there is some other overarching project your team is working on that will be able to directly add 500,000$ a year to the companies income with a 400 hour project then the cost savings of the first project doesn’t make as much sense.
Having this additional business sense can help you prioritize your work and ultimately help you have a bigger influence in the work that is being taken on by the organization.
9. Find a mentor
When it comes to your career and own growth always remember to be proactive with your development. Don’t expect that a principal engineer who is already working 60 hours a week will actively take notice of some tool you made and give you pointers into making it the next Instagram.
Take the time to reach out to the senior engineers around you for advice. Ask them if they have time to be a mentor by going out to coffee for an hour every few weeks and talking about your growth. If they say yes then plan for the conversations you want to have with them before you talk to them to ensure you get the most substance from the limited time your mentors likely have available in the areas that concern you.
10. Grow your soft skills
Just like much of communication is verbal, your programming career is much more then just programming. Successful programmers aren’t just experts in writing seamless code but they are also great communicators able to drive meetings to productive outcomes with clear outcomes and next steps. They exude leadership, the principles of the company, and have a sense of their own principles which influence their actions.
People keen in their corporate soft-skills are approachable and take empathetic approaches to situations while still being able to consider the business. They also are the first one to hold themselves accountable when any of their teams code breaks are willing to jump into the trenches to help bring the teams applications back to life.
For a deeper dive into growing yourself as a person check out The 7 Habits of Highly Effective People: Powerful Lessons in Personal Change
If you’ve made it this far then I am confident you will be able to be one of the most successful programmers on your team! Each of these sections is just a highlight with each area having many books dedicated in their subjects. I encourage you to learn and be curious and deliberate study each one as deeply as I have and continue to do. Life is a journey and the more you learn the more you impact you will have on benefiting society. Please feel free to reach out to me with your github links and ideas in the comment section!