Introduction

For the past two years I’ve been working at ECS as a member of the DATA team. Our primary job is to develop and maintain RESTful APIs for the school. Our APIs are starting to be used all over OSU, from the search page to the campus map.
I joined ECS the end of my sophomore year. It was very exciting for me because this was my first job as a software developer. I had had some small jobs before, but this was the first time I was being paid to code!
I have learned a lot at ECS about programming and software engineering in practice. Classes do not come close to approaching what a real job is like. They do not come close to preparing you for working on a real code base. Even the capstone series doesn’t really prepare you.
Titus Winters defines software engineering as programming integrated over time. Over the course of my two years at ECS I feel like I’ve gotten a taste of what real software engineering is like.
Although I am not quite finished with my degree, I’ve decided that it is time to move on.
I’m grateful for all the time and connections I made with my coworkers.
I worked with the incredibly talented José Cedeno, who has since left OSU. I worked with fellow students Jared and Tso-Liang, who later went on to become full-time employees. I worked with Takumi and Shujin. We recently welcomed two new students: Ian and Ian, and I’m confident that they will carry on the DATA mantle.

What we accomplished

When I started at ECS, we had two public apis: 
  • DirectorySearch for LDAP directory entries using first / last name, email or username. 
  • LocationsSearch for OSU locations including buildings, dining locations (with open hours) and extension offices.
Now we have ten, plus a few more that aren’t public, and plans for even more. Of course, I can’t take credit for most of those–that goes to the rest of the team–but it does show that our team is growing fast. We are also responsible for maintaining all those APIs. 
In the time that I’ve worked here, we’ve gone from a mostly manual deployment process to a completely automated one.
When a pull request is merged into master in one of our repositories, it automatically kicks off a build in Jenkins. Jenkins builds the project, runs the unit tests, and if the tests succeed, it deploys to our development server. Once that’s done, our integration tests run against the live API. If everything seems stable, we tell Jenkins to kick off a build of the production copy, which goes through the same process and deploys to the production server. The API servers are all run inside docker containers for increased security.
This process is called continuous delivery, and I played an integral part in building the infrastructure for it.
One of the highlights of the year was participating in the OSU IT Hackathon. 
The first year that the hackathon happened, I had classes all day, so i wasn’t able to contribute much. The second year, I was away on an internship. But finally, this year i had the entire day free and was able to see the project through from start to finish.
Together with Jared, Tso-Liang, AJ, Takumi, and Ian, we built a prototype of an integration between the campus map and the course schedule, showing markers on the map for each building that you have a class in.
We even won the grand prize!
Other things I’m proud of:
  • Together with José, I designed and built an API from scratch for securely storing encrypted data.
  • I worked on 3-legged OAuth integration, which will enable us in the future to build apis that enable access to personal information like, for example, just hypothetically, course registration data.

What I learned

  • I got to play with technologies that I never would have on my own: Jenkins, Vagrant, Docker, Ansible, Groovy, and Gradle, to name a few. If you want to go into DevOps, having experience with these tools is vital. You’ll see them pop up a lot.
  • I experienced what it was like to work with a team over a long period of time, as part of a large organization. 
  • I saw first-hand how a codebase evolves over time, over a period of several years. I saw how we modified our apis to adapt them to changing requirements and new sources of data; how they sometimes failed, and how we learned from those failures to improve them and make them more robust, sometimes re-architecting them in the process. I experienced technical debt, shifting plans, and real software engineering.
  • I was part of a hiring committee, which was an enlightening experience. I’m sure my experience sitting on the other side of the table will help me during my quest for a job later down the road.

The future

Looking forward, it feels like the DATA team is going to expand and expand to become a central part of OSU.
Data and APIs are the future. A lot of data at OSU is tied up in private databases, only exposed through clunky web pages. Good, open, APIs enable developers to create applications that nobody has even thought of yet. They allow people to create mash-ups of services like we did in last year’s hackathon project, which taught Alexa how to answer questions about people and places on campus using our APIs.
One of the thing I had really hoped we would complete before I left is the catalog API. We released a preview of this in 2016, but ran into difficulty getting permission to use the data, so the project was temporarily shelved. Hopefully we will pick it up again soon.

I’ve been working at Enterprise Computing Services at Oregon State University as a student developer for one year. In our group, we mainly focused on developing Application Programing Interface (API) and other relevant jobs. As a Computer Science major graduate student, real-world working experience gave me a very good opportunity to apply my academic knowledge and concepts to practical situations. Since there are various tools involved in software development, a student developer should learn and be able to use these tools very quickly.

Last summer, I worked on a big project which utilized two open source tools, Ansible and Jenkins, to automate our APIs’ deployment process and implement the concept of continuous integration. Because of this project, I got a chance to demo and present my work in front of lots of audiences including stakeholders. Being able to state the concept clearly to audiences is also a very important skill as a professional software developer. From my experience, these areas are important to any student who wants to become a professional developer.

  • Always practice and enhance your coding skill. Pick one or two programming languages you are familiar the most and keep practicing them. If possible, you can also choose some frameworks (e.g. Django or Flask) to implement your own project. Push them to GitHub so that people can easily view your technical skills and enthusiasm.
  • Writing skill is also important. As time goes by, it is easy to forget details of a project you worked on. Therefore, being able to write clear explanations of a project with well-documented documentation can help you and your teammates save a lot of time.
  • Time management. Manage your time wisely especially when you are a student and also a software developer at the same time. Scheduling your tasks by priorities is always a good idea and it helps you finish your tasks on time and efficiently.
  • Finally, good communication is the most critical skill you definitely need to have. From regular group meetings to large meetings across the departments, you will have many opportunities to demo your work or convince other people. Having a strong communication skill will absolutely help you and your team a lot.

In a nutshell, developing your technical skills and soft skills are equivalently important for a professional software developer. Student or whoever is able to show the above abilities will definitely be a good software developer. Remember that opportunity favors the prepared mind. Hope all future student developers can find a great journey here!