Instructure Internship Report
Outline
- What do I wish I had learned in school before my internship?
x TTD
x More about Git
- Agile Stuff
- Performance doesn't matter.
- A high level language that wasn't C++ or Java
- That OO isn't going to solve my problems
- Functional Programing concepts x Speed is more important than perfect sometimes. (I did learn this in my software design class but it wasn't reall talked about more than once)
- Usability matters
- Pair programing
- How could I have done the internship itself better? Are there any mistakes that I would avoid?
- I wish I would have spent less time trying to figure things out on my own rather than just asking somone.
- Is there another role or company that I would prefer to work for as a full-time position?
- For the most part no, I would perhaps like to work at a company that did functional programing more but that's not a huge deal. For the most part Instructure was awesome.
- What will I do when I return to school to prepare myself for a full-time position?
- Focus more fully on discrete math.
Imagine having a younger sibling following in your footsteps. In many ways, this report should be written to him/her.
Internship Report
Gage Peterson
Fri Aug 21 17:20:27 MDT 2015
INTRO
What do I wish I had learned in school before my internship?
Firstly importance of writing tests. After working for a while it's scarry to look back at the develpment process that I did in school. Sure I tried to make sure some things where commented and things where as clean as possible but for the most of the time adding a few cout
statements into it was all I did in the form of test which I quickly deleted. If I had known that I could think about a problem lot clearer and refactor my code with a greater amount of confidence that I would have probably not been up as manny late nights trying to figure out what my "small" code change broke. The only reason students aren't modivated to do it is because we throw away our projects once we get to version 1 and we never have to maintain that horrible code ever again. Because of this we don't realize the huge amount of bugs that are lurking in there. This is just doesn't scale with any project that exists for more than a month.
Another thing that I wish I would have know is git
. While this is technically taught in school it bearly ever used there. Git is super important! It's pretty much taken over the entire world of software development and for good reason. Even if all students do is use it to save versions of their code they would be hugely benifited. I'm always saddened when my fellow students don't use it just because it seems harder or they are afraid of merge conflicts. But what they are really avoiding is comunicating what they are currently working on. Merge conflicts don't happen if you both know what the other person is doing.
you can't code alone. As smart as you think you are you'll never be smart enough to code the project all by yourself and get things done in a acceptable amount of time. While I do see value in proving that you know something without the help of your classmates when it comes to working, you should probably only wait 15 mins of hard trying to figure something out (somtimes longer if the problem is intrisicly just a hard problem) before you should stop and ask for help. If you spend too much time trying to bash your brain against a problem that udoubtably somone else on the team has already encountered our could help you is just wasting people's money. Remember that your sallery is high and your time is precious. Just ask. My personal rule is to work on it just long enough till I can think of an informed question. Even then somtimes you have to break down and say, "I have no idea what's going on. Please help me". This doesn't mean that you a bad programmer or that you'll never make it in this feild. you have to realize that codebases, programing languages, databases, etc. are always going to be more than you to fit in your head at any one time. Not to mention most of that knowlege won't do you any good to memorize because it will be out of date a few years from now when the codebase has changed or the better databases have been created.
I also wish that I had been taught that Object orientation is not going to solve my problems. While it does provide one abstraction for your buissness logic it's not allways the best one (sorry Java) and not going to do much to improve the quality of your code. That part is still in your cort. I wish I would have been taught that pair programing is a good thing! In school when one person is typing and the other is watching we often call that "cheating" but in the workplace that's called "collaberating" or in it's more Agile term pair programing. It really does help the quality of your code by a huge amount. It helps you find a ton more bugs and more importantly your able to learn from people that know some things that you don't.
Is there another role or company that I would prefer to work for as a full-time position?
For the most part I want to say no. I really confirmed to myself that I want to be a software developer and I really think Instructure is one of the most pleasent places to work. They really put a ton of trust into their engineers. They give basicly ifinite time off (within reason). I rarely get tired of working there at the end of the day or week. The only thing that I feel is left to be dired at Instructure is harder problems to solve. While they may have some hard problems to solve they deal mostly
What will I do when I return to school to prepare myself for a full-time position?
I really want to focus a lot more on math. This seems like a weird considering that I spent most of my time not doing math at work. The main reason is some of the coolest problems you can slove can be done in math. Just simply learning Haskell on the side like many of my coworkers do can really open your mind to how to solve things. Mathmatical concepts like Monads, functors, pure functions, P vs NP, graph theory, formal grammars are all things that have helped me to realize that the most obvious or popular solution was rarely the best solution. I want to horde up as much of that knowledge as I can so that when I'm faced with a hard problem I have more tools to make something elegant verses something that only half works, or doesn't quite abstract things quite right causing problems when new features are added to the project. Math if nothing else makes sure.
Be more organized I really learned that there's a lot of value in being organized It sounds like a no-brainer yet so many students try to fly by the seat of their pants getting things done right before due dates come knocking on the door. I tend to be one of those students. However in the workplace this can't and won't be tolerated You need to know when your meeting is and what you need to work on. You need to remember to do the things you say your going to do. The main concrete change that I'm going to make is to use a planner more.
CONCLUSION