(Update: I started this post with a hope to document my journey from a day-to-day or at the very most a week-to-week basis, but who knew how time consuming and exhaustive the journey during it’s first few weeks could be! So while this was meant to be a ‘live’ week by week account, I am only getting a chance to document my experience now. So these next few posts will be covering my first month on the job, starting at week 1…)
So the big day had arrived.
My journey as a QA Analyst had come to an end after an interesting year and a half, and now the next part of my journey in the IT industry begins.
There were, of course, a lot of mixed emotions. A lot of excitement with the dashes of doubt thrown in just to keep me grounded about the responsibility and challenges I am getting myself into.
Remember, up until this point I have had no official coding experience, bar my own self learning modules I have taken over the past few years. But I am sure that, while the knowledge I gained from those websites and ‘teach-yourself’ books helped get me to the chair I would be sitting in, I had doubts it would 100% prepare me for the challenges to comes.
I didn’t even know what language I would be coding in, or what type of project I would be working on!
I was advised to not worry too much. I was told that, generally, when companies hire junior coders they don’t expect them to know everything on week 1, let alone day 1, and that I had time to familarise myself with the environment and that there wouldn’t be *too much* of an expectation to be 100% productive and developing code in the first week or so.
That of course made me feel a bit better. I mean, there’s always that period of adjustment and learning with any new job, so I guess the first few days wouldn’t be so bad.
So I get an early night the day before, and get ready for…
Weel 1 – Day 1
Which didn’t start so well. On my way to my new place of work, I was involved in an unfortunate fender bender which ultimately wrote my car off due to damages being deemed not worthwhile to fix by my insurance company. So I was an hour late at the office and missed the introduction breakfast and coffee that was planned along with myself and another new recruit. Wasn’t so bad though – the HR lady and everyone else were incredibly understanding and took me on a quick tour of the office, over a freshly brewed cup of coffee (needed it by then!), when I eventually got there and showed me to my desk on the 2nd floor.
The office is nicely laid out and the lime green colour theme of the company adds a nice refreshing splash of creativity and life to the work space. The ground floor is split in to two sections, the ground floor office space and the the kitchen, board rooms, auditorium, gym and pool table lounge.
The first and second floor are all office space and board rooms in an open plan layout, with islands of desks (4 desks at each ‘island’) running down the floor space.
The type of layout is something I especially like. I like being able to see virtually everyone from any point on the floor. It makes everyone seem approachable (there are no ‘executive’ offices as such, every sits at the same styled desk in the same floor space) and it makes the environment very active and social.
So back to my desk. I have been setup with a Dell PC and 2 square monitors (unfortunately no wide screens yet for me!) and a typical flat keyboard and mouse.
So my first day, and my first week actually, consisted mostly of induction meetings, ranging my meeting my team, getting familiar with company policies, procedures, etc and just overall giving me a better understanding who and what the company is and how they operate both from an external business perspective and from an internal employee perspective.
In the same morning I was in my first team meeting and was given my first task to begin work on in our current project’s application.
Our current project is enhancing and providing development support for a client’s existing Windows Form application which we had taken over. My job was to add a new tab to the application, add a bunch of new fields and the making sure the data loads and saves back to the database correctly. *Phew*! It sounded all pretty straight forward enough, but seeing as I still wasn’t sure what language or what tools I would be developing in I knew the challenge has already started! But I thought that, since they should surely know I was a newcomer to the field, what they were given me should be manageable enough, so I took up the challenge with confidence and a little excitement to actually get stuck into this new field.
After the meeting my lead developer assisted me in getting my workspace up and running and getting my copy of the project checked out. This was officially my first time working in Visual Studio (I have seen my previous developers in other companies use it, but I hadn’t explored the application myself up until this point) so already there was information overload regarding checking projects out, setting up my space, getting familiar with the files and folders I would be working in, etc.
But I was given the opportunity to familiarise myself a little more in my own time, and that they only expected me to have some code written and checked in towards the end of the week.
Fortunately, during one of the induction meetings we were told that the company offers a PluralSight subscription to all developers. (If you haven’t heard of PluralSight yet, then if you’re keen about advancing your developer skills it is the ‘go to’ place. Check it out, it’s awesome!)
So I took up the PluralSight subscription with open arms and as soon as I got back to my desk I began researching Visual Studio and C#, and found a couple of videos/courses to get me started and familiar with it.
It was my first time developing and working in C#, but I had some C experience via CS50, and had some hobbyist experience with C++ (via some online iPhone app tutorials), so the general idea behind the code I was looking at was not looking so foreign and I felt already a little confidence that I could get up and running sooner rather than later. There is obviously expected syntax differences, such as ‘using name spaces’ rather than ‘importing’ but the idea of creating objects and using classes was generally familiar (though I didn’t have any real world experience with them outside tutorials).
What was nice about starting work on a Windows Form application is that there was a visual design side to it. So I just pretty quickly into dragging and dropping ‘controllers’ onto my form space, and getting the form at a point where it meets the requirements from a visual perspective. That part was a little fun as it was a nice way of getting familiar with Visual Studio and learning some of the naming conventions of the project, etc.
Once the design was done, it was then time to start loading the data into the controllers when a user selects the respective account from a list. And this is where things got interesting and ultimately challenging for me.
I remember thinking that it can’t be THAT challenging, right? All I have to do is make sure that the right data from the database appears in the textbox. Sounds incredibly straightforward enough!
But as I started working on it it became apparent just how much work there was!
My way of learning and figuring it out was pretty much diving into the inner workings of how other controllers on other tabs worked and pretty much ‘reverse engineered’ and copied and pasted a lot of my way through getting the data to load and appear. I was actually surprised just how much code I was writing and adding.
To get data to load onto the form I have just designed consisted of..
- Add the new variable and properties into the object class, and setup my ‘getters’ and ‘setters’. Ok. So now the class is aware of these new data variables.
- Then, I had to update the SQL store procedure that ‘loads the object’ to return the data wanted when the object calls the ‘load’ method. Alright, so now I am requesting the data.
- Then I had to update the ‘load’ method of the object to assign the requested data into the respective variables of the object. Cool! So now the object has the data it needs!
- Then, had to go into the ‘MainForm’ file, where the fields are loaded with data after calling an object, and had to update the Main Form controllers to populate with the data it receives from the object. But it wasn’t so straightforward, because the tab had about 15 new fields, which were a combination of textbooks, comboboxes/dropdown selections, radio buttons and date pickers. And each of these had their own way of reading in data in some way or another. What made it also a little unexpectedly challenging was that the combo boxes had to display a pre-poluated selection of values (say, months of the year), but the data that is read from the database is a shortened code of that month. So I not only then wrote a ‘Enum’ which had a ‘value’ and ‘description’ of each selection in the dropdown, but had to write some and update some ‘Utility’ methods to convert the code to the month description on load, and then ultimately vice versa for saving..
- But after a while, all the code was coming together and falling into place. Phew! So now the data is displaying! Achievement!
But… that was just the *loading* of the data. I then had to update both the ‘Update’ method, when a user changes any of the fields and saves the new data, as well as to update the ‘Insert’ method, to insert new sets of data when the user creates a new object in the database.
So I had to further update the Update and Insert store procedures. Which was simple enough. But then had to write code on how to capture the data, i.e. to respond to the ‘save’ button. The stripping the all the data from the form, updating the object with the new values from the form, then calling the ‘Save’ method on the object to then write those new fields to the database. At the same time there is method that writes all changes to a ‘change log’ file, so that needed to be capturing the changes correctly as well.
So this task took me the majority of my first week. Learning the code, learning the different classes and files in the project (or ‘solution’ as it is known to Visual Studio), and then learning what was needed to be done and how it should be done. My first week I was creating and adding new controllers to a Windows form, writing new SQL store procedures and modifying existing tables, updating classes and a whole bunch of methods, and then ultimately getting 15 fields worth of data to load, update and insert into a database.
Such a ‘straight forward’ task turned out to be an incredible learning experience and curve. The amount of work was not what I was expecting, and made me a little more appreciative and respectful of how much work is actually done behind the scenes of a simple thing like ‘adding a new field’ to a form. There is a considerable amount of changes and updates to a project to accommodate things like this, at least from my eyes, and it took me the better half of the week to get my form functioning correctly, in-between meetings and learning as I was going.
The hardest part of my task was mostly over, and then as it entered the first round of QA I became quickly aware of how now the ‘simplest’ of business requirements can be just as challenging. Such as, when the form loads for a new object, the date fields mustn’t be populated, but must be blank. Ok, sounds simple enough to ‘fix’.. But how wrong was I! ‘Simple’ things like that turn out to be not so simple. After some Googling and researching on how to make the date picker blank it turns out that the it is not really possibly of the default date picker. It would always default to a date, either be it ‘today’ or a different default date. But I eventually came across some ‘hack’ where you could write a custom method which can ‘clear’ the date field. Which, again, came with its own couple of bugs and challenges to get it working consistently and conditionally, but eventually got it sorted.
Then there was a requirement to have the text field only accept numbers, and not allow alphabet characters. That then required a ‘parsing’ method which strips any non-numeric characters and prevent the user from doing so. All these things may seem trivial now to developers working on these type of applications for years, but I quickly became aware of how bulletproof you need to write you code and controllers. You can’t just assume that because the label of the text field asks for a ‘amount’ value, that the user would know to ONLY input amounts. You need to proactively ensure that we don’t allow any foreign characters. This of course can lead to crashing of the application since our save method is expecting a number value, and won’t know what to do if there are non-number characters.
As a previous person from QA, it is amazing how quickly your perspective can change. As a QA you are taught and trained to try and break things, to punish and stress certain logical conditions set in place. It’s almost a destructive mindset you must follow.
As a developer on the other hand, it’s almost completely opposite. Your job is not to break things but to create, and writing code can feel like surgery sometimes. You are more careful about *not* breaking things, that the cautiousness can lead to obvious oversight. There’s a fear there. And now I can appreciate the relationship and responsibilities between both QA and developers a lot more. Each have a unique and different mindset, but ultimately the goal is the same. To deliver on the requirements set by the business and to make sure the quality of the application is of a expected level.
I am hoping that as I get more confident in my development, when experience starts overcoming the initial ‘fear’ of development, that I can start flexing and implementing my QA background more into more work. Developers, although I have found it is not often done in the companies I have been involved in, should be able to create their own unit tests which stress test their own code and test conditional business requirements. I hope to start looking into doing this soon myself, as it would be a good practice in keeping both my previous QA knowledge still alive and useful while I pursue further into development.
This pretty much wrapped up my first week. Every day has been an incredible learning experience, and I don’t see that ending any time soon. With my first task completed and done within time, I was happy with my progress as so was my peers. Was able to get through with minimal help outside of my own research and learning resources to get me up to speed.
The week was challenging, and although there was little new code that I wrote on my very own (outside of finding solutions from elsewhere in the app and from resources on the net) what I took away from week 1 was a better understanding of Visual Studio, how projects and solutions are organised, and a general grasp on how to find my way around the many classes that create the object and how each work with one another to produce the required results.
I survived my first week, and felt I was a little bit more prepared for the next task challenge I would be presented in week two… dealing with DataGrids and Collection objects…1