And now for the real world ….

If you recall from my last blog post I finished the Coder Camps bootcamp at the end of February.  Obviously I have been busy since then (or you would have heard from me before), but thought I should catch you up on what’s been happening.

The first order of business was a week off!  It’s not easy slogging through up to 80 hours a week of study, coding, troubleshooting, and more studying for 12 weeks.  I needed a break to just do not much of anything for a week (although I didn’t stop coding/studying altogether)!  I had my first interview after a week which went very well – I think if they had not decided to pull the job altogether I might have actually got that position.  Great company, great people, but it wasn’t to be.

Then I spent a couple of weeks visiting family in England – it’s rare to get the opportunity to get a whole two weeks there.  While there I had another couple of interviews and got to the “testing” round for one of those.  Let me just sidetrack for a moment on the subject of putting candidates through tests.

Continue reading

Advertisements

CoderCamps – I’m done!

Friday was my last day at CoderCamps intensive 12-week program for Full Stack .NET web development.  I thought I’d share a few thoughts on my experience.

So, let me start by saying that it has been, overall, a positive experience.  I have shared some feedback with the instructors at CoderCamps on things they could improve, but I would certainly choose CoderCamps again if I had to do it over.

Now, if you’re looking to attend a coding bootcamp yourself, I have some tips & tricks for you. Continue reading

CoderCamps – On cooking and coding

Anyone that has known me for more than, say, a couple of weeks, knows that my other big passion (coding is one, of course) is cooking.  I love to cook.  As I’ve progressed in my journey as a novice developer, I have seen parallels between learning to code and learning to cook.

When I was first learning to cook as a newly minted ex-student who actually had enough money to live off more than ramen noodles, I did so by buying cookbooks, selecting some recipes that didn’t look too complicated, and following the recipes exactly.  There was no experimentation.  No “what happens if I swap the basil for cilantro?”, or “I don’t think I want that much salt”, or “I think I should add more tomatoes to this”.  No meaningful tasting (testing) of the recipe halfway through cooking.  And certainly no cooking with others.

As my confidence grew, I started deviating from recipes – a little more coriander, less turmeric, swapping potatoes for parsnips, or spinach for swiss chard.  Generally these deviations were edible (although there were some disasters), and this led to more experimentation.

Now, when I look at a recipe, if the cuisine is generally familiar to me, I take the ingredients and overall instructions as mere guidelines; freely changing it up to suit my personal taste and, to my mind at least, creating something better than the original.

Of course, cooking at home, where you are likely the only cook in the kitchen, is very different to cooking in a commercial kitchen, where there are many cooks each with their own individual tasks and hopefully none are spoiling the broth.

So it is with coding. Continue reading

CoderCamps Week Eight – Mobile, Miscellaneous, and our Project

This past week was incredibly busy, which is why my week seven post was so late. (I meant to post it last Sunday, then Monday, then Wednesday, then, oh-forget-it-I’ll-just-post-it-this-Sunday).  It truly was a code-eat-sleep week.  Much more so than other weeks.  I think I did manage to get dressed every day but it took some serious self-discipline.

We started the week with an overview of using ASP .NET Identity.  Now, to be clear, we didn’t have time to really dig into the underlying code, but we did implement logins, got familiar with Identity claims (so cool) and even learned how to use a neat plug in called SendGrid to send those nifty “confirm your email” communications that you always get when you first sign up for a website.  All useful things to add to my project!

Speaking of which, we spent two solid days on our projects which I certainly needed.  I had run into problems getting my database to update after changes I’d made (this apparently does happen with CodeFirst database creation, for reasons I’m not yet clear about).  So I did the logical thing – blew away my database so I could start over with a “as-if-it-never-existed” initial migration, followed by a database update.  This was something I’d done before in class a couple of times, and even on my project previously, but Tuesday morning it simply sat there and refused to create the database.

After a couple of hours of blind panic where I envisioned having to transfer my entire project into a brand new project, I finally found a nice post on Stackoverflow that suggested just creating the database file manually, and proceeding from there.  Fortunately it worked, although everytime I make changes requiring me to either add a migration and update, or simply update the database, my “seed” data replicates.  Ah well, a small price to pay for just getting it  back up and running, although things like that do bug me because I don’t understand why it’s happening.  When I have a little more free time, I will dig into that (it’s on my “unsolved mysteries” list for post-class investigation).

Otherwise, beyond a couple of bugs, things went pretty well.  I fixed my filepicker code, got all my CRUD operations working well, although I did initially have an issue trying to grab the log-in user through the Profile table (one) from the Items table (many).  Had to give that one some thought but eventually got it figured out.  I implemented a “soft delete” for the profile table rows, but a hard delete for the items.  No real business reason other than to demonstrate that I could do both (the soft delete of course just runs off a boolean flag and is actually an update method rather than a delete).  In real life, however, I think it makes more sense to do a hard delete for a profile (a profile is attached to an individual using the account log-in – much like you might share your Netflix account with someone, I have the “Where’s my Stuff” account as one that can be shared by multiple individuals).  And I think a soft delete for items makes more sense (if your roommate moves out and leaves their stuff, it might be nice to delete them from your account, but still have their items listed out).

Something to maybe change before the final presentation.

The projects did need to meet all basic requirements by the end of this week, so there was some pressure to get it all done.  Adding to the pressure was a closed book exam to be taken also at the end of the week.  I am not a fan of exams, certainly not closed book ones, and memorization has never been a strong point of mine.  So once I got my project to the point where it was meeting all the basic requirements (plus a bit more), I spent a lot of time studying.  As in, a LOT of time.  I typed up all the key points of creating a full-stack application, summarized them, then distilled them down to a mere 5 pages which I then did my best to memorize.  Not easy, but rewritten to make it clear what I was referring to (e.g. ModelClassName ClassInstance instead of just “Product product”) really helped.

Even so, I approached Friday’s exam with some trepidation.  I am not good at failure (which of course I define as anything less than perfection), but after all my sleepless nights this week I found that the exam was really quite simple and my project met with approval.

After such a long week, it was great to have the weekend off, for a change, although next week we will be back at it and knee deep in Agile!

CoderCamps Week Seven – WebAPI

Wow.  I’m more than halfway through and I’m still standing!  So after last week where we were strictly in the world of C#, this week we’re starting to tie it all together.  On the front-end we have HTML5, CSS (primarily Bootstrap) and AngularJS in starring roles; on the back-end we’re now adding in WebAPI, Entity Framework and databases; along with .NET patterns and security.

Monday was all about WebAPI.  At this point, rather than adding in a “real” database, we opted for a “fake” database (a/k/a “List”) which we put in the server-side controller.  This was so we could get used to accessing data via a data model and server-side controller, and of course communicating from the front-end views, controllers and services all the way through to the data.  Of course, the biggest challenge with all this is that there are many moving pieces.  Our homework should have been very straightforward – replicating what we did in class.  I wanted to use a modal to view details of a selected item, but could not, for the life of me, get my project to work – not even listing the items!

After far too many hours trying to figure it out (I think I spent over 3 hours on this one issue alone – researching, combing through my code), it turned out that the directive I’d been using – $modal – had been completely, irrevocably and permanently deprecated in factor of $uibModal since the weekend.  What I found frustrating about that was that although I’d seen the warnings “$modal is deprecated”, I had no idea that it was about to unceremoniously lose all functionality (and completely break my entire site).  Even worse: the error message was hardly informative – a generic “not recognized” injection error.  I was very glad that this was merely my homework and not a live website!  The lesson from this: pay attention to those warning messages!

Tuesday we spent more time on WebApi and server-side validation; but also spent some time reviewing the flow of data from the browser (e.g. via user input) through the client-side controller, client-side services, and then over to the server-side controller and on to the database; and back again.  Of course, there is the equivalent of client-side services on the server, but this was Tuesday and repositories didn’t get covered until Thursday!  One can only learn so much in one day.  Server-side validation can be done in the controller, but in the interest of following the “lean controller” architecture, it’s good to put it in the data model instead.  Given our homework was pretty light, I took the opportunity to spend some time working on my project getting Google maps implemented and playing with FileStack (formerly known as FilePicker).  I did set up some controllers and models also, although no doubt there will be changes as we work through this week.

Hump-day and it was time to talk about setting up a code first database.  In the past I’ve generally used the database first / EDMX approach, but with Entity Framework 7 on the horizon where it looks like that will be deprecated, it’s good to learn about the Code First approach.  It still requires a good number of steps, however, so I took copious notes and hoped I hadn’t missed anything!  Later in the day we spent time talking about database structures.  Now, bear in mind that this is not a SQL class nor a DBA class of any kind, but even a web developer needs to know something about databases (relational or otherwise).  For myself, I’ve had enough exposure to databases to understand the importance of structuring it correctly, so this was a fairly easy review for me.  Still, it’s a little different implementing a database rather than just looking at someone else’s beautifully designed schema.  I spent a good amount of time working on my project – still working with FileStack (I really want people to be able to upload a photo!) and also creating a table or two in the database for my project using the Code First method, although I have a suspicion that I will need to redo a lot of this as we learn more about actually setting up relationships and Identity (I have yet to create a log-in!)

Thursday was perhaps the toughest day so far.  Understanding one-to-many and many-to-many relationships is not quite the same as creating them using a method you’re not entirely familiar with!  Still, with the help of many, many notes from the lesson, I was able to successfully create the tables, and the relationships, and return both all records and a single record based on the URL.  I couldn’t quite figure out how to bring back only the records matching on the related data (e.g. only the items belonging to certain owners), but hopefully I will get that resolved sooner rather than later.  I also added a delete method.  Given that this was such a heavy day, some humor available here for all us novice coders!

Friday – group project day!  So as with the earlier group  project, we were given a task (in this case to build a simple auction website) and rather than work on it as a single group we divided into two groups of “online” (those of us not physically there in Seattle) and “offline” (those in Seattle).  By the end of the day we had our entire site scaffolded out and simple data access working, leaving us the weekend to continue working on the logic of placing bids (but only if it’s higher than all other bids) and how to close out the auction.

Some of us had more success than others in that over the weekend …. I spent a good chunk of time on my project – getting all the WebAPI controllers and repositories in place along with the various CRUD methods.  My project is beginning to come together!

CoderCamps Week Six – C#

This week it was back to (somewhat) familiar territory for me as we spent the week in C#.  I’ve spent a number of years doing various C# classes, but being able to focus on just this rather than squeezing in studying around a fulltime job and all the other day-to-day things we have to do is invaluable in being able to keep all the dots connected in my brain. Continue reading

CoderCamps Week Five – AngularJS

AngularJS is an immensely popular framework for front-end web developers written entirely in JavaScript.  It’s designed to simplify and speed up web development by giving you shortcuts for many of the common tasks you need to accomplish as a developer – typically the “plumbing” type tasks of connecting A to B, or defining what page you should see if you you go to this URL; and, of course, DOM manipulation.  It’s strength is in single page apps that have a lot of user interaction requiring many updates to the page.

And this week was all about AngularJS!  Angular 2.0 is in beta; so we focused on the current released version, 1.4.8. Continue reading