Software Engineering
Hello there Internet friends, your electronic friend who came to you in form of electrons travelling at the speed of light through wires is back again. Today’s post will be fairly short, this past month wasn’t that great in terms of productivity and discipline, but I still have some thoughts to share and reflect upon, so without further ado, let’s dive in!
All I have now at the top of my mind about the last month is about project 2 of CS61B Data Structures and Algorithms: gitlet version control system, and yes it’s what you are thinking about, a tiny (not that tiny) version of the famous git, and this can give you a glimpse of how complex this project can get.
Even though it sounds like I am devistated from the project, I am actually doing quite well! I have managed to cover 80% of it, check my progress here, but the thing is that there was a weird mental barrier that told me sometimes that I am going to fail to handle the project..
At the very begining of the project I felt totally lost, where to begin and what to handle and build first and how to build it, how my design decisions now will affect the project structure later, am I going to be able to build on these commands to handle other commands, how the add
and remove
commands will work along with the commit
command??? And the wheels on the bus go round and round, so as my brain!
Nevertheless, I am gratefull for this harsh experience, because this is the very first encounter with what is known as Software Engineering
Professor Hug stated in one of the lectures that
Computer Science is about managing complexity
And this is what happened in gitlet, things got complex. I do what I always do when I don’t know what to do, I throw myself into water and then think about how to handle it, so I just began by writing the init method, followd by the add method, and so on. So if I am going to emphasize it, it will be
Start with a piece of the project without much thinking on how it will align with future pieces, let that for future
And it indeed worked like magic! I made enormous progress from that point onward, and past pieces needed a little refactoring.
Why did I called this software engineering? Because the real-world software are written in a cycle not in a line, software development is cyclic not linear
Don’t let the fear from failing hold you down, because if you do, you will 100% fail.
That’s all I have for today, see you in the next one <3