
Umar Atlagh's Digital Portfolio
INTERNSHIP
Introduction
The internship assignment is an assignment created to have students experience what it is like to work in their chosen career path. Students intern with a company of their choice and help them work on a company beneficial assignment. Students are required to spend at least 72 hours with that company, documenting what they did each work day.
Internship Reflection
​
My internship assignment had we working for a small software testing company by the name of Lighthouse Technologies. My job was to analyze an old complexity analyzer program they had written and see if I could determine what the issues were and resolve them. There were quite a few challenges that I faced during my internship, but the biggest one was that I was working with a language I had absolutely no experience with. In order to have a degree of competency, I had to teach myself visual basic with the free resources available to me.
​
Even more difficult still was that was very different in the way that it worked compared to other languages I had used to write programs in the past. In order to work with and test the complexity analyzer program, I had to learn how to use visual studio. Visual studio is an integrated development environment created by Microsoft for programmers to create their programs with. This experience also made me learn how to explain to other people who did not know the technical details of what I was working on what I was doing in a detailed enough way that they understood, but not so detailed that technical terminology was brought up.
​
Once I got the basics of the programs and language I would have to use and started actually analyzing the code, I quickly realized that in order to come to a solution I would have to understand what the program exactly was doing in a fair degree of detail. The main purpose the program served was to calculate the cyclical complexity of code from all kinds of programming languages and output them to the user. This data would then be taken and used to help reduce the complexity of the code to the least complex version of it possible. In order to understand the logic used by the program to calculate cyclical complexity, I would have to understand cyclical complexity in great detail myself.
​
Another new thing that I learned during my internship was about the rigorous work of the software testing side of the job. I was familiar with developing my own software and testing some software made by other people, but I had never run extensive testing on programs before. The mindset behind this requires extensive knowledge of the program the tester is working on and what exactly it is that it does. The goal of the software tester is to not only test the functionality of the program it is that they are testing, but to also come up with test cases that are likely to break the program if error exception is not handled correctly. In the case of a triangle making program for example, it might be interesting to see what happened if an invalid value was entered in as one of the side lengths.
​
During this experience I also taught myself a very valuable skill that was so important, I use it on my own personal projects. After a program is completed, thoroughly tested, and ready to be released, it is important to have a way for users to install the program without them having to have any knowledge of the program beyond surface level. The way that all organizations do this is by created installer packages and using installation wizards to add user friendliness into the equation. Fortunately, I found a tool that was free and made creating installer packages and wizards extremely easy. The program is called NSIS, and it is used by a large number of small organizations and independent creators. It automatically makes whatever group of files you want into an installer package and guides you through the process of creating an installation wizard with a fantastic GUI setup. In case developers decide they want to create the wizard outside the GUI, it also comes with its own coding language so that you can script the perfect install wizard.
​
I learned many useful and important things from my internship experience. I learned that not everything will come easy, even in the chosen career path. Standards will change in constantly evolving fields like the field of computer science or cyber security. Having technical reading and writing skills is also important to being successful. Sometimes you will have to explain projects to people who do not have the same technical understanding as you do, and it is important to know how to describe it to them on a level that they will understand. What is most important however, is to always be through in your work. Be through in the creation or analysis, be through in the testing, and be through in creating solutions.