So week 1 came and went pretty quickly.
In my first week I attended about 2-3 indication meetings a day, was given my first development task and submitted that in come the following Monday morning.
I was pretty much thrown into the proverbial deep-end in week 1 and found myself familiarising with Visual Studio, C#, and our Windows Form project our team was working on.
As far as development goes, I had created a new tab on a Windows form application using the designer tool, added 15+ controllers of various functions, updated a handful of object classes to use the new properties and variables, updated various load and save SQL store procedures, and then updated and created a whole bunch of new methods.
The first week was filled with much trial and error. ‘Reverse engineering’ ‘legacy’ code to work out why existing functions are behaving like they do, and how. I as a result became familiar very quickly with the Visual Studio debugger and breakpoints system and ‘watch’ feature. Definitely a step-up from the ‘gdb’ console debugger we were introduced to with our C programming in CS50!
I also was introduced to a very handy SQL tool called ‘SQL Profiler’, which allows you to watch all SQL calls made to a database, which you can then use to find out what exactly is being requested, and use that to find out what is being returned.
So with all that behind me, it was time for me to start my second, and what would ultimately be my most challenging week yet, as I dived into the DataGridView controller, joining SQL tables, creating new classes and collection objects, and all the trials and errors around that.
So, on to week 2…
Admittedly week 2 didn’t start so great. I came into the office and found my PC off. On start-up, it hanged at the Windows 7 boot up screen for a worrying long time. After a couple forced restarts and booting into safe mode, it was becoming apparent that something bad had happened to my boot-up drive and I was unable to reach my desktop, and/or if I did, it was incredibly slow and applications weren’t starting. Turns out, as luck would have it, my PC was plugged into the power supply of the nearby water-cooler and not into the UPS power supply junction, and the past weekend we had some power failures in the area.
Fortunately my development work had been saving itself to a separate drive, and after a couple hours of troubleshooting, the IT team got me a new machine and set me up with my previous dev hard rive to recover my files. Thank goodness for that! Learnt a lesson there… have your development work backed up, or at the very least keep it separate from your main OS drive, just in case of situations like this. Saved me a LOT of trouble and time!
So with that all eventually sorted out, we had our team meeting later that morning and got assigned our next set of tasks for the upcoming week. I was pretty happy with my progress from last week and was a little more confident at what challenge would be given to me next.
The task I was given was to create another new tab on the application, this time showing a collection of ‘Notes’ in a grid/table-like view with some additional fields related to the account selected.
So the first thing I did was began work on the layout and design of the tab. The fields I needed for the additional Notes data were a couple of date pickers, a combobox and 2 text fields. Then for the Note grid itself, the only controller I could really find that would seem to work best for me was the DataGridView controller. So I placed that in there too.
Now, was admittedly the hardest and trying part. The previous week was, when looking back at it then, relatively easy. All I had to do was update an existing object class to add some new data. This time, however, I had nothing to ‘add’ to and pretty much I had to start from scratch with the Notes object that was needed. I was supplied the database table where all the Notes data existed, and I had to link it to the account when selected and pull each row of data.
Admittedly at this point I felt like I was now truly in the deep end.
I tried not to be defeated so early on, so I began with the Notes class. This was my first time creating a new class from scratch, both in the project and in general outside tutorials. I had an idea what I needed to do. I had to create a Note object, which has all the values and properties I think I would need, and then I would have to have a ‘Collection’ method of the object.
I looked around the project to find other instances where a similar requirement was already in place, and I found 2 other similar class files that had a ‘Collection’ method to it. Although the construction of the class didn’t match what I needed 100%, it was a good starting block for me. So I created the Notes class, with a lot of copying and pasting from other files, and did the necessary tweaking of the class to get it as close to my object’s requirement.
This is where things got admittedly tricky. I then needed to find a way for my class to call upon the Notes data from the database. This was, once again, my first time dealing with such requirements and I got stuck and hit my head a few times. I knew that I needed to call the SQL stored procedure which got my Notes data, and then create a new instance of a Notes object with every row of results returned from the database.
I spent far too long on this task than I would have liked, and stared at my screen in defeat on more than one occasion. But my perseverance to overcome this challenge kept me going.
During this point in time, my HR lady and I had a small meeting (ala ‘catchup’) on how things were going from my side. She asked the normal questions like, ‘do I have any problems’ or ‘am I enjoying it so far’, etc. One question she asked was ‘do you have any regrets taking the position?’. Now I am generally an open and honest guy, and I believe in good communication, so I answered truthfully at this question. I said that I don’t have any regrets per se, but I sometimes wonder if I am truly capable at the job I am in, and if I made the right choice to put myself in this position. Only because I didn’t want to let my team down and I felt there was a level of expectation from me. I wasn’t admitting defeat, not at all, but I was in a position at the time where I was feeling the pressure and a bit of stress, and wanted to be open with her in case my struggles became apparent in any performance review she might be already tracking. She already knows my profile and is aware that I am not qualified, so she gave me some words of encouragement and we setup another catch up session for the following week.
Back at my desk, after many trials and equal amount of errors I slowly but surely constructed the code to get this to work. There wasn’t much that I can say that was a ‘revelation’ point for me during this where it all just suddenly made sense. I just kept my focus on the problem and just debugged every one of my attempts until the solution was finally coming into place.
Slowly but surely I was seeing the light at the end of the tunnel. My load method was working, and it was filling a collection of Notes data with all the data I needed. What I needed to do next was update the MainForm class to be aware of the Notes collection.
To make many hours worth of coding short, I eventually had my DataGridView populating with the collection of Notes data and then when a user selects a Note item from the list, I populated a separate form of field with additional information. Once the loading and population was working, I then worked on the update and saving methods for the Notes collection.
My mood changed considerably by the end of the week! I was achieving what I thought was the impossible based on the knowledge I had/lacked and time required to do it. My tab was working more or less as required, and I just needed to some final tweaks and bulletproofing of the tab the following Monday.
When it went through it’s first round of good QA the following week the feeling of accomplishment was awesome, and I felt revved up once again.
Truthfully if you had to ask me to repeat everything I had just done I wouldn’t be able to do it with my eyes closed, since I couldn’t yet tell you 100% *why* my code was working how it was working. But the take away was that I figured out and learnt enough of how the data was working with the app to put all the pieces of code together in a way for it to all come together.
So still at this point I am still happy learning via trial and error and from reverse engineering pieces from elsewhere in the app to get my task working. Through this I am slowly learning all the quirks of the C# language, and how it is generally constructed and used, as well as learning how the app was originally coded and finding my way around the source files. Along with learning more and more of SQL and the application’s database design.
Looking back after 4 weeks, this was the most challenging to date, but knowing that I persevered gives me the confidence that things can always get better.
During week 3, I had a whole new task, and that was creating a whole new windows form screen and with a new class and data collection. Bring it on, I say…