It has been nearly four years since I made the career switch from rabbi and educator to software developer. In the time since I've made the switch I have worked as a software engineer at a financial services corporation and as a developer advocate at a communications API company where I focus on platform engineering and the developer experience for Ruby programmers.
I look back at where I was when I first began this journey in 2017 and there are many things I wish I knew before I began. However, of all the things I wish I had a clear appreciation for, there are three in particular that I think would have been pivotal.
If you are just starting out in your first job, or you are still contemplating the move to software, I hope these insights I have learned will be helpful for you.
I remember when I learned my first bit of code. I don't remember exactly what it was anymore, but I remember how it made me feel: Empowered and terrified, both at the same time!
On one hand, I had learned how to make the computer do something I did not know how to do before.
On the other hand, the road from that first basic lesson to "mastery" looked endless. I watched my instructors seemingly conjure up functionality like it was a potions class at Hogwarts. How would I ever get from where I was to there?
In the years since, I have learned that the learning never ends. There is always more to learn. The very concept of "mastering a language" or "mastering a framework" is a bit of a misconception.
Yes, you can achieve a lot of familiarity with a language. You can become really comfortable with the syntax, and the underlying approaches. Your code will probably get a lot more sophisticated than when you first began, but even the most veteran developer will tell you that they do not know everything.
Knowing everything is impossible. Perhaps, counter-intuitively, knowing that knowing everything is impossible became even more empowering and reassuring for me.
An integral part of this career path is to commit to a life of continuous learning. Not every career path is as fully integrated with lifelong learning as software is.
In some other professions, the completion of the degree or the training signifies the end of the vast majority of your learning. In software, it's the opposite. Whatever training you did -- whether on your own, in a bootcamp or in an academic institution -- that signifies the beginning of your learning, not its completion.
Now that I have fully come to appreciate that, I am a calmer developer, and I enjoy the learning journey even more.
There is always something new in software development. New web frameworks. New languages. New CSS frameworks. New design patterns. New libraries and packages.
Every developer news website, blog, and conference schedule features these new and shiny things often. When you are just starting out it can feel like you must be ready to switch from one new thing to the next every other day. It can be overwhelming.
I entered my first software developer job at a financial services corporation expecting that mad rush to new, the never-ending race for the latest shiny toy. I walked into the office the first day ready for the sprint.
Then, I sat down for my first meeting with the tech lead for the team, and he shared that we were working on a legacy WAMP (Windows, Apache, MySQL, PHP) application and using SVN (Subversion), an older alternative to Git, for version control.
It is often cited that the vast majority of the web runs on WordPress, which is powered by PHP. The Ruby language ecosystem does not fall far behind on that dominance of the modern web.
In many companies, you will find legacy applications that are still powering multi-national operations. Why is that? Well, there's a lot of reasons for that. One of the most common reasons is something that a seasoned engineer I respect a lot once told me:
Old tech is boring. Boring is battle tested. It's community supported. It's stable. Stability is crucial for uptime and overall success.
When I first started out, I thought for sure I would be joining that race of constantly chasing the shiniest new things. Yet, in my four years so far, I have had the privilege to work with mainly PHP and Ruby. By far, these are not the hottest new items in the developer community, but they are far more prevalent in the job market than one is led to believe by only reading blog posts and looking at conference schedules.
I switched into coding after a relatively successful career in the clergy and in the non-profit sector. I had about a decade of work experience with me when I began my first job search as a newly minted coder. You would think that I had some self-confidence when I entered the interview room. Well, you would be wrong.
I did not trust my skillset, and as a result I did not trust myself. I forgot that interviewing always goes both ways. As much as the company is interviewing you, you are also interviewing the company.
Did the company provide you with a take-home project that was wildly complex and gave you an estimate of perhaps over a week to complete it? What does that say about how they value the time of their employees if that's how they treat prospective employees?
Did the company ask you to answer some questions on a whiteboard in an interview session? Were the questions at all related to the role? How did the interviewer act during that time? Did they encourage you or did they humiliate you if you couldn't implement a binary search algorithm by memory with a marker on a board?
As much as you want and need a job, the company you're talking to also wants and needs an employee. Each region of the world has different job markets, and some places the scale is tipped much more in favor of the employer than the employee vies-a-vie number of applicants, while in other places it's the opposite.
However, no matter how the stats look on number of applications in your region for a job, your dignity and your self-worth is not up for negotiation. You are a person invested with priceless human dignity, and you ought to be treated that way. It doesn't matter if you are a first-time job seeker as a coder, or a senior software architect.
If only I had recalled that basic and fundamental truth more often during my first job searches I would have avoided a lot of heartache while being treated poorly by interviewers and companies that showed no respect for the individual in front of them.
This career path is filled with lots of rewards, and a lot of potential for personal fulfillment. Above all else though, it is crucial to never forget that you are valuable and you are worth respect not because of your job or your proficiency in code, but because you simply exist as a person. As long as you remember that and hold that idea firm, you will go a long way.