Career change

Hi! Welcome to my blog. I’m Lucas Cercal and a big fan of games since six years old when my parents bought their first computer. At the age of 17, I faced that decision of a lifetime: my career. I chose to study Mechanical Engineering, not because I love any specific area, but because it presented a wide job market.

During college, I liked most the thermodynamics field. So, I started working as an undergraduate student researcher in a renowned laboratory. My first work was with a fluid dynamics commercial code., which allowed me to include code written in C to extend the basic functionalities. That’s where my programming story starts.

Hello world with bug
Ops...

To be fair, when I was a teenager, I owned for a short period an open tibia server. So, I had written some code in Lua. During college, I had two programming courses. The first one focused on pseudocode and a brief introduction to C. The second one employed Matlab or Octave to solve numerical problems like derivatives and integrals.

Then, during the research activities, I had my first experience learning a new programming language on my own (and searching on Stack Overflow). I am not going to lie: it was very inefficient. I took too long reading books and too little writing code. Nevertheless, I liked it.

In this first project, I had to understand and code a little. But on the following year, I switched to a new project that proposed to rebuild an existing Fortran numeric simulation program in Python.

Fortran is the greatest of the programming languages
The aliens already knew it!

Learning Python was way more pleasant than C. I used Codecademy and, in a few hours, I could write scripts to solve some simple numerical problems.

Unfortunately, Python’s performance was not good enough to solve the project (competing with Fortran is challenging). So, I retired from Python in my research activities. Yet I took a course on Udemy by Jose Portilla about data science because I was curious. And it helped me better visualize and present data.

The project changed to C++ to enhance performance. And that’s the language I worked for almost three years. I employed Deitel & Deitel’s book to learn the basics of C++.

In my fifth college year, I worked a semester as a researcher intern in a multinational. That was a great experience! I kept working mainly with C++ programming and solving automation problems with Python. And I employed VBA to manage Windows processes and run some simulations in parallel. The idea was to increase the number of instances of a program used to optimize components.

After my internship’s end, I graduated as a mechanical engineer at the Universidade Federal de Santa Catarina (UFSC) and started my master’s in the same institution in the thermodynamics field.

The first year taking my master was focused mainly on the classes and helping other master students on their projects employing Python. Those projects were funded by the same company that funded my project. At that time, I was already a known Python evangelist inside the laboratory, where most people use Matlab. My main argument was that Python is open source and, it makes the adoption of the newly developed solutions easier for the laboratory partners.

My thesis was the implementation of a computational fluid dynamic model using C++. My programming journal from March 2015 to May 2020 is mainly based on coding numerical simulations using C++ and Python.

In June 2020, I got the job of my dreams and started as a thermodynamics researcher at the same multinational where I took my internship. Since my master’s thesis was not complete, I still had to work on my on it after work. It seemed a dream come true. But as the months went by, I realized I was not programming anymore. My routine consisted of project meetings, slide presentations, spreadsheets, a lot of experimental tests, CAD modeling (like SolidWorks), and commercial code simulations (through graphic interfaces). After nine months (March 2021), I realized that was not my dream anymore. Worst yet, it was the beginning of the COVID pandemic.

To be honest, at that time, I didn’t have the same love for (complex) thermodynamic physics. So, I started looking for job openings for programmers in my state (Santa Catarina).

What followed was the least structured study plan I have ever experienced. Initially, I looked for game companies. As I always liked games, I thought: why not? I started learning C++ (including some more complex subjects like GPU programming) and the basics of C#. At that time, I read Uncle Bob’s Clean Code and Kent Beck’s Test-Driven Desing books. I employed the Pluralsight platform, which has great courses. A few weeks later, I realized that was not what I wanted.

My routine was killing me. I was working as a researcher, getting used to the pandemic, working on my masters at night, and trying to find some time to learn to program. Missing the first shot was quite depressing.

Then I looked for web and data science job positions. I had taken some courses on Udemy about data science and was able to pass on Santander’s and Codenation’s (Aceleradev) data science Bootcamp. I got in Santander’s Machine Learning Engineering Bootcamp too. Aceleradev was a Bootcamp based on hands-on learning with nine weekly challenges and, it was one of the highlights of my study routine. At Santander’s Machine Learning Engineering Bootcamp end, I was in the top three students and was called to participate in a mentorship. I had to decline because my routine was very intense.

I was outworn, but I realized that even I had an affinity with data science, it was not for me. I missed my second shot. It was July already, four months after deciding on becoming a programmer, and I was back to square one, only more tired. I tried asking for a vacation (in Brazil, we have 30 paid days per year), but the project was in a critical phase and, I couldn’t leave.

In July, the Aceleradev Bootcamp would still be going until the end of the month, but I decided to split my time between data science and web development. I didn’t like the idea of quitting the Bootcamp in the middle. So, my solution was to increase my study load.

I started taking a course on Udemy about Web development with Django. At the end of the month, I had finished the course and was trying to build simple things by myself. A friend encouraged me to apply for an internship at the company he was working on.

Without a lot of hope, I prepared my resume and sent it to his company (and other five companies). Only two of them called me for an interview, while the other companies put away my resume (and I get them, it was all about numeric simulations). I was called for a take-home code assignment for a basic web project. I had two weeks to build the best code I could. At the code review interview, there were four engineering tech leads. I was honest about how inexperienced very determined to learn I was.

A week later, at the beginning of September, a leader called me at the office (with social distancing) to tell me that I got the internship at JobScore! I talked to my leader at the multinational and, a few days later, I left my job. I took almost 45 sabbatical days between the end of one and the start of another position. During that time, I rested without studying. I only took the Codecademy Ruby course since that would be my main language from now on. I didn’t slow down just because I got a new job. I slowed down because the last six months were hard. I worked and studied every day from 7:30 A.M. to midnight.

At the new company, it was time to get back to study. This time, I could study at a slower pace. Working during the day, doing my master’s and, learning programming at night would still be intense. But I could sleep earlier to avoid the famous burn-out.

I started studying Ruby on Rails because it is our everyday stack. Then I took the web development course by Colt Steele at Udemy. I 100% recommend this course for people who never worked on web development before. Last, I took the React and Redux course by Stephen Grider at Udemy.

I didn’t have the opportunity (nor time) to study the mobile developer career path. Yet it seems a promising field. I want to try some mobile technologies in the future, even just out of curiosity.

After three months of internship, I got the Software Engineer position. Recently I presented my master’s thesis and closed the mechanical engineering phase. I intend now to take some free time to understand a little better about the programming universe. It is time to stop taking courses and start taking a hands-on approach. At least, I believe in that.

Main Study Conclusions

After trying three different fields in a very unorganized way, I spent more energy than needed. Still, I reached my goal: work as a developer. I want to share some thoughts to help people in the same situation. If I had to do everything again, I would try the following to change my career in the least time possible:

Research what programmers from different fields do, talk to some, and choose one. After it, it is time to study. Each person learns best in different ways. I’ll tell you what works best for me: taking video classes (courses) to understand the main concepts. And read the documentation for more specific stuff. In both cases, it’s better to code along, even if only to create muscular memory.

If it is your first contact with programming, I suggest starting with an interpreted language at Codecademy. Probably Python because it is employed both on web and data science.

From now on, I’ll employ web examples. But data science and games could apply similar concepts.

After you understand how to work using a programming language, it is crucial to visualize the most employed technologies for your field. Anyway, it’s fundamental to learn Git. William Justen de Vasconcellos has a great free course at Udemy (in Portuguese). Employ Git in all your projects. If your field is web development, there is the Back-End, Front-End and, DevOps division. It would be nice to take a course showing the main facets of each area. With that in mind, I recommend the course from Colt Steele at Udemy: The Web Developer Bootcamp. However, the modern Front-End goes beyond this course. If you want to be a Front-End or Full Stack (Back, Front and DevOps) developer, it’s worth taking a course like React with Redux (or Vue) from Stephen Grider at Udemy.

The Full-Stack programmer is specialized in a field but understands a little about everything. Hipsters Ponto Tech is a Brazilian podcast that talks about this professional. From what I see (this is a thumb rule, not a law), smaller companies prefer Full Stack professionals and, larger companies seek more specialized professionals.

After all those courses are over, it’s time to create personal projects to build a portfolio. Even though it’s not mandatory, it helps a lot. Alongside the project, learn TDD via Kent Back’s book or an online tutorial. Testing is part of the everyday work of a Software Engineer. And some companies may ask for tests during the recruiting process. Another great book is Clean Code, especially for engineers (electrical, mechanical) who use greek symbols as variable names (like speed difference = delta_x_dot).

The time to seek a job has come. What to do now? There are people specialized in helping others find jobs. I am not one of them. But the following worked for me: write a one-page long resume with your professional and academic experiences ordered from newest to oldest. If you have personal projects, list them! But the most important is to find companies willing to take and train junior professionals. Before each interview, try to understand the company’s product. Sometimes it’s not needed, but if you are going to work there, it’s best to like the product. And don’t forget the company culture. If there is no alignment with your beliefs, it won’t work for you.

Do not be frightened by the job requirements. Several jobs openings won’t find a professional that meets all requirements. Particularly in programming, where job openings turn into Twitter jokes because of the abuse of requirements.

Ask for an experienced Software Engineer to help you with your career change, perform code reviews and help you with catching bugs and security issues. Working on a company speeds a lot the learning - it’s worth getting lower compensation than you got now to make the transition. That is where I am today. I am a junior near seniors professionals, which is very motivational and insightful. Code reviews are great to understand how we can become better engineers.

Other learnings

No knowledge is useless. Yet some are less important to get the first job. I’ll list some interesting topics that should not be the priority for someone in a hurry to become a programmer.

https://github.com/kamranahmedse/developer-roadmap https://www.discoverdatascience.org/career-information/