Don’t Be Intimidated By Your Projects

What have I gotten myself into?! This project is going to be insane! Will I be able to finish it in time? Am I smart enough to understand these new concepts? These are a few of the many questions that fluttered through my turbulent whirlwind of a brain. I’m sure many of you can relate to these exact thoughts when biting off more than you can chew, and I’ve come to realize these thoughts are not unique to just a select few of us. These are ubiquitous to the software engineering field, and some refer to it as “imposter syndrome”. What I want to lay out today is a way to push through these thoughts and organize the steps you will need to take to successfully complete your project! A lot of these points are random things I’ve read on the internet in the past, things I’ve learned from various jobs, or things I’ve learned through school. To illustrate how I go about understanding and laying out my own projects, I’m going to talk about my capstone project for Oregon State University in the Post-Bacc Computer Science program. I hope this provides some different perspectives to others looking to tackle tough projects of their own!

Choosing a Project

To me, choosing a project is the most difficult part. Ideally, you want to choose something that will keep your interest and also challenge you at the same time. Nothing is worse than populating a GitHub account with partially completed projects and just crossing your fingers those pesky interviewers won’t look too deeply into your codebase (I have some personal experiences with this). Here are some things to keep in mind when choosing your project:

  • Does this project interest you?
    • Something that might align with your hobbies or something that is just plain fun like a video game.
  • How hard should it be?
    • If you are trying to improve your c0d3 5ki11z, you want to choose a project where you are sure it’s going to implement concepts you’re not familiar with. The best way to learn is to just do it!
  • How long will it take?
    • Is this a quick project just to show off a skill (2 to 5 days) or is this something I want to pour my heart and soul into (2 weeks+)?
  • What language should I use?
    • There are a couple different ways to think about this. If you want to use a language you already know, just do it that way (I’m sure there will always be a framework or something you can use to accomplish what you want). If there is a language best suited for what you are doing, do that! If you have a target language but aren’t sure if it will be good for the project you chose, use the target language anyways! Essentially, just choose whatever language. Don’t get hung up on which will be best, just choose one and go with it.

For my own capstone project, I am making an audio recording station that can loop audio and also edit or modify the recorded tracks. I’ve been involved with playing and creating music for most of my life, so this is something which completely lines up with my interests. This project is going to take the full quarter (the length of the capstone class), and there are many concepts which will be foreign to me going into it (grabbing audio from an input device, saving an audio stream to a database, modifying the audio stream, etc.). As for the language, I will be using C#/.Net. Why did I choose this? Because where I live, a lot of companies use the Microsoft stack, and I do not want to move away from where I am. So, you could say I am conforming to my environment!

Research

This is the best part of it all! You get to gain knowledge, figure out the direction you want to go with frameworks and other technologies, and ask other, more knowledgeable developers on advice for creating your project. Here are a few things to consider when conducting research for your project:

  • What do I not know?
    • This question is much harder to figure out than it appears. Let’s imagine that the project you are creating uses data from user input. In your mind, trace the route your data will take to its final destination and understand the where the data is manipulated, transferred, saved, deleted, etc. Are there any steps along that visualized route in your mind where you don’t know how to get from step A to step B?
  • What frameworks exist that will make my life easier?
    • Is there a web framework you need? Is there an ORM that will make your life way easier for database transactions? Think of common framework functionality then do a deep dive to see what exists in regards to what you need for your project.
  • What can my chosen language/framework not do?
    • There will always be times you come up to limitations of your programming language. Chances are, someone has hit this same brick wall. Check online and see what others have to say! (Sometimes, you may even need to implement another language all together. Can someone say microservices?!)

What I’ve learned about the C#/.Net framework is there is not much support for audio I/O (from what I could find). C# doesn’t have too much of a capability of creating your own audio drivers, but you know what does? C and C++. There are projects like Port Audio which provide ready to use APIs for audio I/O. And guess what?! C# has the ability to directly call C/C++ functions. This is just the start to what I don’t know. Now, I need to learn how to use these APIs. So much fun ahead!

Creating a Rough Structure

I think this is the most important part of creating a project. This is your opportunity to take all of that confusing stuff you have in your head and condense it down to a couple sheets of paper (or files). While I have not hit this point yet (still in the research phase), I would still like to create this for my project soon. Here are some tips I’ve picked up along the way:

  • Create any diagram you want
    • This can be a UML diagram or something you made up on the fly. Seriously, this doesn’t have to look pretty. Make a couple boxes, a couple of arrows, and a couple of classes. Just make sure you know things like what classes are in charge of what functionality, who is making transactions with the database, and what is the general flow of data.
  • K.I.S.S.
    • Keep it simple, stupid.
  • Know your database and data structures
    • This may be the most useful thing for when you start programming. If these two things are on point, it makes it easier to organize our thoughts and follow the flow of your diagram.

Final Thoughts

Well, now that you are at the end, I hope you found some of this useful! I have a lot of rambling thoughts and it’s nice to put them down on paper (just call me whirlwind brain). When it comes down to it, don’t be intimidated by anything. In the words of Rob Lowe: if someone out there has accomplished what you want to accomplish, why can’t that someone be you. Organize your thoughts, find a cool project, do your research, and create a flow for your program. Afterwards, everything else is easy. Good luck programming!!!

Leave a comment

Your email address will not be published. Required fields are marked *