How I Landed My First Developer Job
I don’t have a Computer Science degree, but I currently work as a software developer: here is my journey on how I landed my first developer job.
Traditional education
I went to a scientific high school in Italy and then I pursued a BSc and MSc in energy engineering. From all the subjects covered in these studies, I had some kind of programming courses or classes that covered some software development.
In high-school, within maths hours, I was introduced to some Pascal, however, I have no memories of what I was programming back then. During my bachelor, I had a course for programming where I had to study a bit of C, but I never really had to properly code anything (from what I remember): even the exam consisted in solving a problem by writing down a program in C. Besides this course, I had some minor contact with Matlab to do (if I remember right) same basic computational fluid dynamics (CFD).
The time I started to program a something with a valuable outcome was for my MSc thesis where, to simplify an increasingly complex and slow Excel sheet, I started to write some Python scripts. The objective of the thesis was to understand the technical and economic impact of having flexible energy load (in the specific case, electric water heater) in a group of households that have some solar photovoltaic (solar PV) installed. Using Python, instead of relying on “vanilla” Excel, allowed me to:
- use open source libraries to simulate production profiles of solar PV installations;
- have outputs for an increased number of scenarios compared to waiting for minutes before a detailed enough macro was going to give me some valuable results.
At this time I was not relying on any type of “good engineering practices” and my only objective was to get a “good enough” result.
Working as an energy engineer
My first job experience was working for a small energy cooperative, Coopérnico, based in Lisbon, that, between other things, allows its members to invest in new solar photovoltaic (PV) projects. Among my tasks I had to (1) analyse the feasibility of new projects and (2) help ensuring that our financed projects were performing as expected.
The solution for task (1) was initially an Excel sheet with macros to do the techno-economic analysis. This solution was working perfectly, but it had the following “pain points”:
- it was very tedious to add the input for the analysis
- it took some time to calculate the results of the analysis
- the analysis performed was limited.
Leveraging the experience I gained writing the scripts for my MSc thesis, I created a Python script to resolve all of the above mentioned points creating a more efficient (and enjoyable) experience to run analysis for new projects.
For point (2) I was periodically creating slides to present to the board of directors how our portfolio was doing in terms of new installations, how much our projects were producing vs what we expected them to produce and highlight any incident that occurred.
I had never worked with any web interface before, but after some Udemy course I was able to stitch together a simple enough dashboard to:
- visualize all the company projects “stats” (their size, real production vs expected, …) on a map
- have an overview of incidents and their status.
Working on these solutions I realized: (1) I really enjoyed writing software and (2) I wanted to invest more time writing code (eventually getting paid for doing so).
42 Lisboa school
That’s when I joined 42 Lisboa. This school provides free education based on a peer-to-peer (therefore, no teacher or any equivalent figure) and project based learning.
The main selection process consisted in 4 weeks (including weekends) to “experience the school” and see if there is a match between the candidate and the school’s pedagogy. I remember the process started with around 200 candidates of which the most abandon along the way finishing the period with around 50 (at most) candidates spending some time in the school.
These 4 weeks were the highlight of my time at 42 and left a mark on the way I program and think about my software developer tools today. The first problems presented to the candidates were (I don’t know about the current ones) about Bash scripting: definitely not the most user friendly way to get a taste of software development, but for sure a valuable skill and tool for any good software developer. It then passed to C to learn basic data structures and software development concepts. During these 4 weeks I mainly learned by:
- reading
manpages and a variety of results from my Google searches, - asking for help to people that knew more about the specific topic,
- teaching people what I learnt for the specific problem.
I remember the main tools I used for those weeks were (1) the terminal
emulator (iTerm2 to be specific) and (2) a web browser.
In the terminal I was editing my small programs using vim, automating my
testing and recurring tasks using Makefile and, rarely, debugging more
complex issues using dbg. This setup was initially turned from being scary to
very familiar and comforting.
I didn’t manage to finish the school because, I got a job offer and gradually finished to focus on 42 projects. Here are some of the ones I worked on or contributed to:
- a simplified version of Bash written in C
- a sorting algorithm with limited instructions in C
- a 2D game and a 3D game written in C
- an HTTP server in C++