Saturday, March 5, 2011

Good Intentions and Where They Lead

It is said that, "The road to Hell is paved in good intentions;" this is most certainly true, although in my case, I'm only in purgatory, I think. I last posted in December 2010, outlining my intentions for my professional and technical development. I then promptly put all of those intentions on the back burner as my life and my job became increasingly busy with the holidays, several large projects and implementations, and the general stress of life itself.
Nearly four months later, I find myself in this sort-of "purgatory;" a situation in which I have tried to pick up my technical development in C#.NET right where I left off, and found myself having to start all over with my studies. I sat down at my computer this morning with the intention of diving right into automated software testing, wishing to build up my knowledge base in functional automation, content validation, and performance testing in Visual Studio in preparation of my next project. Instead, I've had to go back to the basics, and re-learn the principles of the .NET Framework and coding in C#.NET.

Given this unsettling discovery that my mind does not, in fact, hold onto every little piece of information I take in and preserve it perfectly for future use, I must start over. That said, I am renewing my intentions to master the skill of C#.NET development and learn the art of automated testing. First things first, I must close out this post and start studying to refresh all the information that was lost in the dusty cellar of my brain. More to come on automated testing in my next post.

Wednesday, December 29, 2010

Professional Development and Web Presence

In my recent conversations with multiple mentors, my personal brand and marketing have been discussed at great length. For the past several months, I have been focusing on my technical development (first honing by Business Analysis skillset, then moving into the Application Development world). While technical development is all well and good, my mentors and I discovered a gap in my personal brand and how others perceive me, both in person and on the web. In order to close that gap, I have developed the following goals for my personal brand (these are by no means in order of importance or "due date"):
  1. Develop a consistent Web Presence:
    1. Have one brand message on all professionally visible websites (LinkedIn, this Blog, Twitter, my own website when it is up and running, my Google Profile, etc).
    2. Keep my personal social network mostly separate from my professional social network (in other words, Facebook will be treated very differently than LinkedIn, Twitter, or my blog)
    3. Own the KristinGalstad.com domain name and attach my personal website to it
    4. Increase key words in my profiles in order to increase web traffic and dominate the Google Search Result when someone types in my name
  2. Develop my own definition of Leadership:
    1. How do I want to be perceived as a Leader?
    2. What Leadership traits in others do I wish to emulate?
    3. Am I someone who instills confidence in others?
    4. Can I "rally the troops" around a common goal?
    5. Do peers look to me for critical thinking and innovation?
    6. Can I facilitate effective decision-making from within or the head of a team?
More to come on this later as I continue to explore my personal brand, but I wanted to get these initial thoughts out in the open. I find I have more success in completing my goals when others are aware of them and hold me accountable.

Sunday, December 19, 2010

A Belated Recap: Day 4 of Boot Camp

To my regular readers: I apologize for the delay in posting about my last day of boot camp - my computer has been on the fritz, and I wasn't about to type an entire post on my iPhone (while the ability exists, it's a major PITA on that tiny little keyboard). My new Visual Studio/SQL/VMWare View-compatible computer is on the way (albeit backordered), so I'm just crossing my fingers that my current computer doesn't completely die until the new one gets here - right now it's playing nice and even let me open a browsr window without crashing; this was a promising event!

Anyway, on to the main event: my final day of .NET Boot Camp. Day 4 was by far the most challenging day, from both a content and brain capacity standpoint. We started off by discussing web services, both .NET and WCF (Windows Communication Foundation). The basic premise of a web service is to send/receive/translate an XML schema into classes, objects, and methods in order to transfer information from one site or service to another. A good example of a standard web service a developer might call might be a service that shows the current weather and radar. Since a web developer is not a meterologist, there are web services available to fetch and present data from the National Weather Service that your code can call in place of attempting to predict and map the weather yourself. A great resource full of common web services available (many are free), check out XMethods.

While I understood the basic premise of a web service, my confusion began to mount when we dug deeper into WCF, which is the safest, most secure way (in the Microsoft world) to access web services. Perhaps my brain had finally maxed out, but when the instructor started talking about HTTP Protocol, message-level encryption, and service configuration, I completely glazed over. He could have been speaking in Greek for all I knew. While I still need to do a lot  more digging to figure out how to implement WCF methods, I have provided a simplified table of the basic coding differences between a .Net web method and WCF below.

Type:    How to Map:                   File Ext:    Method Decorator:    Class:              
.NET     "Add Web Reference"       .asmx          [Web Method]             Web Service
WCF     "Add Service Reference"   .svc             [Operation Contract]    Service Contract

After web methods and WCF, we covered how to manage state in a web application, in other words how to save information between PostBacks to the server (typically, when you click a button or enter information into a website, the page is completely destroyed and re-loaded with the new information). While I won't go into detail about them here, we covered application state, session state, view/control state, query strings, cookies, and hidden fields, and the benefits, drawbacks, and common uses of each.

We wrapped up the day by covering how to deploy a website and how to configure the security/authenticate users (Windows Integration versus Form Security/Forms Authentication). We also talked about how to condition your database to utilize the standard ASP.NET security controls (these include "create user," "change password," "Login," etc) to make your security configurations easier.

My biggest challenge going forward will be to find a way to practice and utilize what I've learned so I am able to retain as much of it as I can. I plan to continue building the website I started in class to practice all of the different skills, as well as to look for opportunities to sit next to my developer coworkers and study how they approach these concepts in the real world. Here's hoping that I am able to do a lot of this between now and my advanced .NET and MVC class in mid-January!

Wednesday, December 15, 2010

Visual C# 2010 and ASP.NET 4.0 Bootcamp, Day 3

"I have to admit, it's getting better, it's getting better all the time..." (The Beatles, "Getting Better"). It's true - each day of class is better than the one before. I'm getting to know my classmates on a more personal level, and have discovered that most of them come from more creative backgrounds (art, music, literature) than I had thought based on their professional experience - they are truly a fun and fantastic group of people to learn with. Here are the highlights from today's class:

  • Validation: Visual Studio 2010 provides developers with simple, yet powerful tools (controls) to validate user input. By dragging and dropping one of the standard controls into your UI and editing a few properties, you can make a field required (the user cannot submit the form without that field populated with some type of data), you can validate age, you can make sure an email address follows standard formatting (text@text.com), you can compare fields (ex: Password and Confirm Password - this control enables you to validate that the contents of both fields really match), and many more custom controls. This is one of the coolest tools I've learned yet!
  • LINQ (Language-Integrated Query): I am now able to insert, query, and remove data into tables in a database to store information entered through the user interface. I know there is much, much, much more to LINQ than my simple statement, but this is an area I will need to study more in-depth after my class is over. For now, I am content with only understanding the basic functionality.
  • AJAX (Asynchronus JavaScript and XML): AJAX allows developers to determine specific portions of a page that PostBack to the server instead of forcing the entire page to reload each time something is changed during a browsing session. AJAX controls allow for significantly increased efficiency in page loads, and also allow for some wicked-awesome UI tricks like creating tabs that load and reload on their own and deep-level zooming and interactive image viewing. I still have a ton to study up on this subject matter.
 I'm really looking forward to tomorrow's class, where we finish up the content for this course, but I will be sad when this course is over. I have learned a lot and had a ton of fun while doing so. I can't wait for my Advanced .NET and MVC course in January! "It's getting better all the time...Better....Better....Better..."

Tuesday, December 14, 2010

Visual C# 2010 and ASP.NET 4.0 Bootcamp, Day 2

Day 2 of my bootcamp went significantly better than day 1. The instructor started us off with a pop quiz covering the material we learned yesterday, which I aced thanks to my continued review at home last night after class. The only item from yesterday that I'm still struggling with is Exceptions and Exception Handling, but I spent about an hour in lab today trying to gain a better understanding of exception handling through applying it to the simple webpage I created

After we finished reviewing the basic concepts of development in the .NET framework (a final, more detailed look at the principles of Inheritance - Inheritance rocks, by the way!), we took a dive into web development by creating and adding functionality to a web form. A lot of this is very similar to creating a windows form and adding functionality, but a large difference comes into play when you look at the code behind the app, which can include C#, HTML, and Javascript. Visual Studio is helpful in that it renders all your C# code to HTML for you (web browsers only read HTML), but if you only write in C# (a "server-side" language, as it is called), your application's performance will be greatly reduced in its ability to communicate efficiently with the browser.

In order to accomodate for this, most developers use the HTML toolset and write much of their code in Javascript, since it translates/communicates more efficiently with the browser. Unfortunately for me, that means I need to outright learn Javascript, and need to gain proficiency in understanding and writing HTML.

My major success for the day was creating a website using a Master Page (basically a template that keeps a standardized look and feel on all pages of a website, and allows you to update the look and feel of the entire website with one code change rather than changing the code on each individual page), User Controls (smaller blocks of code and UI that can be re-used throughout the website and all updated as a group with one code change), links to and between all of the different pages I created, classes, methods, exception handling for user inputs, and basic UI design. I was pretty darned proud of myself when I finished that in the lab today, and I came home from class feeling like I made great progress in applying what I've learned so far. I am very excited to see what I learn and apply in class tomorrow!

Monday, December 13, 2010

Visual C# 2010 and ASP.NET 4.0 Bootcamp, Day 1

I'm exhausted. I had forgotten how much work it is to learn a new skill set, especially one as technical as software development. I started out the day with anxious anticipation: would I be the "Star Student" or the "Dunce" of the class? Would I ask seemingly stupid or obvious questions? What would happen if I answered a question incorrectly in front of the class??? With all that running through my head, I arrived at the training site and was met with not one, but two enormous textbooks (I'm not exaggerating here, they are both the size of college-level chemistry books) among the other sundry class materials.

My courage withered as I lugged the two giant tomes to my desk to await my fate and the arrival of the trainer. As other students began to file in, I began to question them as to their background and their reasons for taking the class and was met with more disappointment. Most of the other students in the class were already developers (mostly Java or data), they just weren't familiar with the .NET framework, C#, or Visual Studio 2010, and were only attending to enhance their own development toolkit. My mind began to conjure up an image of the .NET framework, only in my head it looked not like a development tool, but like a giant gallows with my name on it.

Just as I was beginning to think I should leave the class and ask my advisor if they had a "Beginning Software Development for Dummies" course, the trainer arrived. After the obligatory introductions, he began to review the syllabus...and I breathed a deep sigh of relief. 90% of the material we were going to cover during this first day I already understood, at least at a high level. The sun was rising behind that gallows I had conjured up, and it was beginning to take the shape of an elegant software tool that would greatly simplify my approach to software development.

After I got over my harebrained ideas of giving up before I even started, the day improved dramatically. We spent the first 7 hours discussing the basics of software development: creating a project in VS 2010, how to write basic code in C#, how to comment code, how to debug an application, how to create a class, how to declare and call a method, how to add fields and set them as either public or private to enable or disable direct access, how to get/set a property to access a private field, how to declare a variable and how to use  and convert variables in your code, how to create and use an array, how to handle exceptions using the try/catch/finally code block, and how create types. I'm sure I missed several large topics in there, but I think my point is clear: we covered a lot of material today, and I feel fairly confident that I understood at least 90% of it.

The last hour was spent doing "lab work:" proving out what we had learned during the lecture and discussion by writing code and designing simple UIs. My defining moment of the day happened when I was able to create an application that calculated the square root of a number in two different ways: the .NET Framework Math.Sqrt method using the Double data type, and the Newton Method using the Decimal data type. In doing so, I was able to prove that, although the Decimal data type has a size double that of the Double data type (16 bytes to a Decimal versus 8 bytes to a Double), the added accuracy of the Decimal type far outweighs the reduced range and increased memory requirements. In this app, I was also able to verify user input in the form of both the data type (if the user entered alpha characters, the app produced a message asking them to input either a Double or a Decimal) and whether or not the value entered was positive or negative (if the user entered a negative number, the app prompted them to enter a positive one).

At any rate, enough geek speak for one evening - time to let my brain rest in preparation for another day of intense learning tomorrow!

Thursday, December 9, 2010

A New Adventure

Next week, I am attending my first class to learn about  the .NET framework, the C# programming language, and Visual Studio 2010 (C# 2010 and ASP.NET 4 2010 Bootcamp at Benchmark Learning ). I've already spent the past 3 months or researching development techniques and practices on my own and developing side-by-side with some of the application developers in my department to learn from the experts, but in order to move forward toward my goal of becoming a developer myself, I needed some formal training.

I am excited to embark upon a new adventure and face a new challenge, but at the same time, I am terrified that I won't understand the subject matter or that I won't excel at software development. In order to feel more prepared, I've been reading up on Object Oriented Programming and practicing writing my own simple applications in C#. I have learned how to create a class, an object, a method, a property, and an event handler. I've practiced designing simple user interfaces (beginning with the age-old "Hello World" application and then graduating to simple games and a small program that randomly generates math problems and runs a timer).

Today I had my biggest success yet: I was able to (with assistance) create an application that automatically tests the User Interface of another application by creating a delegate with an event handler and invoking method from the application being tested (Article by James McCaffrey). While I didn't fully understand the code I was writing, I was able to infer the meaning of some things based on McCaffrey's explanations of what was going on behind the code, and ask my developer colleagues for help understanding the more complicated code. When I was finished, it was pretty cool to watch my test application push the buttons and return results in the other application, and then tell me whether the tests I wrote passed or failed. I am excited to write more throrough tests tomorrow to further prove out my test application, as well as to practice more code writing.

My goal in the coming weeks is to narrate my learning process so that I can refer back to things I learned and the struggles I faced in the future when they are not as fresh on my mind. I also hope that by keeping a log of my struggles and epiphanies, this blog might also serve as a reference point (and a point of commiseration) for other beginning developers. Here's to the challenges (and rewards) ahead!

Tuesday, December 7, 2010

A Brief History: "How I Came to Be Where I Am Today"

My story is a strange one. If you had asked me 7 years ago what I was going to "do" for a living when I grew up, I would have confidently informed you that I was going to be a professional musician, most likely a French Horn player in a major orchestra or a film score composer in Hollywood. Life had different plans for me.


I started off on a path that I thought would lead me to professional musiciandom: I attended a small, but well-known midwestern music school. I majored in music and participated in as many ensembles as humanly possible. I studied theory, ear training, composition, music history, and a plethora of other musical topics (I also studied management, marketing, and accounting, just to make myself well-rounded). I travelled to Asia and Europe performing in different ensembles. I even composed the first movement of a Symphony and conducted a full orchestra the live premiere in front of an audience of about 300 people.

Sadly, I focused so intently on music that I burned out. By the time I graduated from college with a BA in Music Management, I was tired of being in school, and most definitely tired of studying music. I decided to take a break and work for a few years before attempting grad school. Unsure of what I wanted to do, I took a position as a receptionist at an IT consulting firm.

I found the IT firm to be a veritable jungle of unexplored possibilities. I learned about everything from how a basic network is set up to the best methods for managing risks on a software implementation. More importantly, my interest in Project Management and Business Analysis (the gathering of requirements for software projects) was piqued, and a new energy was born within me to learn more about technology.

From the IT firm, I moved to a position as a Business Analyst on the technology team for a mid-size advertising agency. For the past year and a half, I've spent most of my waking hours honing my skills around collaborating with developers to imagine and design the best possible custom software solutions to meet all of our business needs.

I have been so excited by the skills I have learned, and so interested in the processes happening "behind the scenes" (i.e. the actual writing of the code and designing of the UI), that I recently made a career decision to attempt a move from the "business" side of technology (Project Management and Business Analysis) to the "technical" side (Software Development). More to come on that in my next post.