Introduction
My name is Michael Danaher. I am from Ireland. I came to the United States shortly after receiving my bachelor’s degree in computer systems from the University of Limerick. I remember as a child I would always tinker around with settings on our computer or when playing with my parent’s mobile phone at the time. This interest in technology grew over the years, and it convinced me to follow a career path in technology. The first year of my course in the UL consisted of giving us a taste of the three main technology courses that a student can enroll in.
Computer Systems, Computer Games Development, and Mobile Communication Security. I took beginner modules from each of these courses to see where my interests would lie. Before this, I honestly had very little knowledge in any of these areas of Computer Science. So, it was a great opportunity to get a broader understanding of Computer Science and what area I wanted to pursue. In the end, I chose Computer Systems. Choosing Computer Systems would allow me to further study the areas of artificial intelligence, software engineering, and data management. Therefore, for the next three years of my degree I studied the areas of Computer Systems.
Near the end of my studies at UL, I managed to get a part-time job as software engineer for a start-up company Altada, focused on AI. After completing my studies, I joined Altada fulltime. Here, I got to be involved in creating industry level software applications. This industry experience has proved vital to progress in my career. I learned so much from senior software engineers who had many years of experience. After working in Altada, I decided I wanted a change of pace from living in Ireland. So, I decided to further purse my career in the United States. Thankfully, after a couple months of constant applying for positions in New York City, I finally received a job offer as a Software Engineer at Adco Electrical. In this role I have been given a great opportunity to apply everything I have learned from my previous role to create powerful software solutions for the company and its clients.
Computer Science Fellow
career options
There are many areas and career paths that you can pursue within computer science. All of these fields carry the same computer science fundamentals and many also overlap with each other.
Design, develop and maintain software applications. Working with programming languages to create software solutions for a variety of platforms.
Specialize in creating and maintaining websites. Working with technologies such as HTML, CSS, and JavaScript to build user-friendly and responsive applications.
Analyze and interpret complex datasets. Use statistical techniques, visualization tools and machine learning to extract insights on large datasets.
Manage and organize data using specialized software. Design, implement and maintain databases to ensure data security and integrity.
Design, implement and maintain computer networks. Ensure efficient and secure transfer of data between different systems and devices.
Focus on protecting computer systems and networks from security breaches. Monitor suspicious activities and respond to security incidents.
Computer Science Fellow
skills
What are the main hard skills you use on a daily basis in your current job?
Object-Oriented Development (OOD) is a fundamental paradigm that profoundly influences the way I design, structure, and implement code daily. I was first introduced to OOD in college, but I realized its crucial importance when I started working in the industry. In college we were first given straightforward exercises to get our minds to think in a more logical way. Once comfortable with the exercises we would move on to larger projects. These projects would consist of multiple structures and objects. For example, a popular project given to students is a hotel booking system that would incorporate a hierarchy of users like manager, to employee, to customer. Each user would have different permissions, thus having a different object structure. At Altada, much of the project work was split between multiple teams. It was paramount that everyone’s code was structured, reusable and well maintainable. OOD allows me to write clean code while also helping me to visualize how components of large software applications work together to create a finished product. OOD is fundamental in my current position as software engineer as I am leading the design and development of a web application.
DevOps is crucial to create a collaborative and efficient approach to software development and delivery. DevOps aims to promote automation and continuous improvement of software applications. I got my first taste of DevOps when I was working for Altada. I would be tasked with constructing a simple deployment pipeline that would automatically publish the latest version of an app for public use. Now, I use DevOps everyday as a central hub for the entire development lifecycle. I manage our codebase and use continuous integration to seamlessly provide fixes and features to software applications. When looking at upcoming features for applications, I use DevOps to properly structure the result of the feature as well as providing a seamless way of integrating the new feature into the existing application. It is also beneficial for planning future features and fixes. As I can properly set out accurate tasks and timelines for feature rollout in advance.
Database Management is an especially important aspect of computer science and software engineering. It involves the organization and manipulation of data in a secure manner. As I am creating web applications that utilize large amounts of data, I must manage and structure the data in accordance with many different data management guidelines. I got my first experience of SQL and Database Management Systems (DMBS) through multiple college classes. These classes ranged from handling small datasets to millions of rows of data. Each week we would receive a dataset and be asked to restructure so it conforms to good database management principles (1st Normal Form – 3rd Normal Form). In my career, I frequently write SQL queries to retrieve, update or delete data efficiently. I also conduct performance tuning tests to better optimize the SQL queries. Proficiency in SQL was particularly important in understanding how to correctly structure multiple data sources and avoid data loss and corruption.
What are the main soft skills you use on a daily basis in your current job?
Adaptability is crucial in the dynamic field of computer science. During the software development lifecycle, I frequently come up against new challenges that I must spend time figuring out. I also must adapt to the changing trends and search for techniques that can help improve software design and development. I use the agile methodology during development so I can constantly adapt to changes in the project scope and goals. To improve this skill, students can research the agile development methodology as well as properly researching before starting a project. By doing so you can prepare for any changes and issues that might arise during the project.
Communication is a very important skill to have in the workplace. As I am working with a team of engineers, constant communication is vital to make sure we are all on track to meeting goals. Especially when I have encountered an issue or problem during development, I always find it beneficial to speak to other engineers to get their insight on the problem at hand. It also provides a space for us to ask questions and to learn from one another. It is vitally important for students to engage with team members during group projects. Doing so will allow students to broaden their knowledge.
Problem-solving skills are paramount in the workplace and especially so in computer science. Projects are bound to face obstacles, and having strong problem-solving skills is key to overcoming them. Being able to analyze issues, identify potential solutions, and implement effective strategies contributes to a project’s success. I use problem-solving skills every day to approach challenges with a proactive mindset. Doing so allows me to solve problems at a much faster pace, keeping the project on track. It is important for students to hone their problem-solving skills as it is a vital tool that they will repeatedly utilize throughout their career.
Michael
’s personal path
Tell us about your personal journey in
Computer Science Fellow
:
A person’s path to working in industry comes with various challenges. My journey to work was no exception. My first step to secure a job was to update my resume and LinkedIn profile. I wanted to show the many new tools and skills I had learned up to that point, as well as updating with new job roles and descriptions. Updating my resume was especially important, removing any unnecessary or irrelevant information and keeping everything concise and to the point.
Upon completion of my profile and resume I started applying for jobs using LinkedIn Jobs, Indeed, and ZipRecruiter. At the beginning, responses to applications were slow, with many employers conducting a hiring freeze at the time. After a month of applying for roles, responses started becoming more frequent. Many of my first-round interviews consisted of starting with general conversation about my background and what I know about the company. Some companies would send me a programming assignment to be completed within a week in between rounds of interviews. These assignments consisted of a series of computer science and software engineering related questions. Some of the topics covered by the assignments I completed included data structures and algorithms, APIs, and software design.
Due to my visa being a J-1 graduate visa, I needed to secure a job within 3 months of arriving in the US. The time constraints added to the stress of looking for a job. I had many job interviews throughout my 3 months of looking for work. The number of automated emails letting me know I did not progress to the next round of interviews was disheartening to say the least. However, with determination and perseverance I managed to secure a role as a software engineer in the final weeks of my three-month grace period. Interestingly, I was contacted by an employer on LinkedIn as they were aware by a friend of my background and my interest in looking for a job.
After multiple virtual and physical interviews and 1 assignment, I secured the job. The assignment consisted of multiple data structure related questions and tasks, each taking at most 25 minutes. Even though I went through many failed attempts at securing a job, I learned from these attempts so I could improve for the next interview that came my way. It is important to learn from these interviews and to ask for feedback from employers. This process of looking for work really challenged me and taught me to underestimate my ability or skills.
What would you tell your younger you regarding building your current career?
I would tell my younger self to always engage with people and put your best foot forward. So much of my current career goes down to talking with other people in my field. Be it through attending meetup events or connecting with people on LinkedIn. Connecting with people is a very wonderful way of furthering your career. It is also a terrific way to learn from people who may have more industry and interview experience. I would also tell my younger self to never stop learning. The world of computer science moved incredibly. This is especially true with the introduction of AI.
I would tell my younger self to embrace new programming languages, frameworks, and tools. Attend conferences, participate in online courses, and always be curious. By being open to learning, the more versatile and valuable you become. Finally, I would tell my younger self to embrace the challenges that I will face. Challenges are opportunities to grow. I should not shy away from difficult problems. Instead approach them with enthusiasm and intrigue. Problem-solving is a crucial skill in computer science and software development, and overcoming challenges will not only make me a better engineer, but also improve my confidence and help excel in my career.
Final thoughts & tips
I would recommend students use all the resources they have at their disposal. Be it online courses, or articles related to your field. Using these resources will help further your career as well as help you find your interests. Furthermore, during semester breaks, it is a good idea to take the time to look for internships or to even do your own personal projects so you can create a portfolio of projects to highlight to employers during the interview process. The most important thing I found is to do a project on something that you are interested in. In my case I would create music-related software solutions. By doing a project on a topic you are interested in, you are much more likely to see that project through to the end.
Resources to dig in more
Codility
Provides many interview style coding challenges and assessments. Great tool for practicing for upcoming interviews.
Tech Interview Handbook
Indepth guide on interviewing for software related roles. Covers all areas of interview and assessment testing. Provides tools for best practices during interviews.
Stack Overflow Blog
Straightforward introduction into how to prepare for a technical interview for a software engineer position.