- Posted by Intent Media 06 Jan
- 0 Comments
In the previous post, I went through a few of the ways that an engineer can develop the skills that help get that great job in tech. Mostly, I talked about things that you can do outside of your working life to get better. In this post, I’m going to get into how learning can be part of your job.
I think that most smart engineers have an appreciation for the material in the previous post. Most promising candidates I meet understand that they need to be as best prepared as they can be to snag a fun, challenging tech job. The point I see many miss though, is that their tech job is the beginning of the next phase of education, not the end of their education.
One of the most important things a professor ever said to me was the following.
Everything that I’m going to teach you in this class was invented after I left school.
The professor was Dennis Kroll, and the topic of the course was Java development (that thing I now do for a living). His point was about the duration of our educational journey as engineers. If we wanted to stay useful and relevant as engineers, we were going to have continually find ways to learn more, throughout our professional careers.
If that sounds unreasonably challenging, I have good news for you: we have the tools to make this easy. Working in an exciting technology startup involves all sorts of learning as an embedded part of the work.
For example, at Intent Media, within the past year we’ve had study groups of various sorts around TDD, management, QA, and functional programming. If you’re a student getting bored and exhausted with tedious homework, this might sound like a negative to you, studying more once you already have a job. It’s actually a huge benefit. These sorts of opportunities give you a chance to continue to get getter at the things you do and the things you want to do in the future, guided and supported by the people who know your work the best, your coworkers.
Beyond simple things like study groups, startups can be places where people experiment with and rapidly adopt new techniques that are going to allow you to develop and grow as an engineer more effectively. I’m thinking of things like agile squads (which we just adopted at IM) to organize the teams and lean coffee to run meetings. These are techniques which will have an explicit impact on how well you are supported and guided to become a better engineer.
Another great technique that a company can use is pair programming. If you’ve never tried it, pair programming might sound scary and invasive. It’s not. In fact, pair programming is one of the best tools that an organization can use to ensure that all of its engineers are growing and learning. When you pair program, you are directly in the code learning from another engineer how they write good code. The examples could not be less abstract; you learn from implementing your actual work. This is miles away from the frustrating artificiality of school homework.
But pair programming at its best is not just a one way street. It’s a great way for everyone to learn from everyone else. Even if the code that you know that I don’t is just the 10 lines of Java you wrote yesterday, that’s still 10 line of code that I know nothing about. If I’m on your team, I want to learn what you know about that block of code.
As a cultural practice, pair programming promotes a more egalitarian environment where it’s explicitly recognized that all engineers have knowledge to share and deserve the opportunity to learn from each other. On the data engineering squad that I work on, we’ve formalized this with this saying:
We are all teachers and students.
By which we mean that we should all be humble enough to learn from each other. This also means that we should be thinking about teaching as a core component of our jobs.
As I talked about in this post and my recent talk at CITCON, data engineering teams need to ensure that all team members have a shared understanding of the problem, the application, the techniques, the failure modes, etc. One of the obvious first steps for a team looking to build reliable machine learning software is to ensure that everyone has some basic level of education in what machine learning is and how it works. Ideally, those team members with the most amount of knowledge in this area should be working on sharing that knowledge with the other members of the team.
When I worked for AI pioneer Ben Goertzel, he never hesitated to teach new hires concepts as basic as the difference between precision and accuracy. If he has the time to teach new members of his team, then I think that all senior engineers or data scientists should have the time to ensure that their team members know what they need to know to be able to make valuable contributions. Training team members so that they understand the problem domain should be a given.
And, of course, teaching a topic is also one of the best ways to learn a topic. So, as an engineer learns over their career, they may find themselves switching formal roles from student to teacher, but they should still be learning through teaching.
Learning how to choose
I hope all of the above material is useful to the engineer looking to understand how they develop the skills to get a good tech job. I understand that it can be hard. Despite the enormous shortage of software engineers, it can still be quite difficult to find the right job when you’re just starting out.
The well prepared software engineer is likely to have a wealth of choices, though.
Even in that situation, it can still be hard to understand the basis for which you should choose Company A over Company B. Given how important learning and growth are to your future as an engineer, I’d strongly encourage you to think about how you’re going to grow before and after you get that first exciting tech job. It’s been my experience that startups offer great environments to learn and grow as an engineer. If you asked me to recommend just one company, I think it’s clear whom I would recommend.
But regardless of if you come to work with me, I think that you should work at some place that values your lifelong development into a better technical professional. My best advice on how to get into such a place is to start thinking and acting in terms of that scale: your entire working life as an engineer (even if you wind up in management someday).
You owe it yourself and everyone who helped you get this far to never stop learning. The journey of becoming a better engineer is never ending but never disappointing, either.
Jeff Smith is a data engineer at Intent Media working on large scale machine learning systems. He has a background in AI and bioinformatics. Intent Media is the fifth startup he’s worked at, and it’s easily the most fun one. You can find him tweeting, blogging, doing more blogging, and drawing comics all over the internet.