What I Did, Volume 5

What I Did is a series that documents software development-related work I’ve done the previous week. As the old adage goes, that which is measured gets done, and there’s nothing like broadcasting to the world that you’ve done nothing to motivate the self, right?

This week:

  • My SQL-to-RTF project passed QA. Praise the Lord.
  • I finished Udacity’s Programming Foundations with Python. I’m new to neither Python nor OOP, but because I felt that my grasp of the latter was severely lacking, I enrolled and completed this course. This course was great, because it wasn’t for complete beginners (and thus, no lessons on what a string is or how to print integers), but it was simple enough that, at the end, I think I *finally* grasp the basics of OOP, how it is useful, and how to implement in Python.
  • I began the next course that’s part of Udacity’s Front-End Web Developer Nanodegree, which is Responsive Web Design Fundamentals.
  • I began looking up blog/website themes to see what I’d like to do. It’s kind of overwhelming, so I’ve started to skim the samples and clicking only on those that appeal to me immediately. It’s not the best system, but if I succumb to Decision Paralysis, this might never get done.

Areas of Improvement as of May 2015

This morning, I put the finishing touches on a script I’ve been working on for the past couple of weeks. This was the second large project I’ve worked on this year, and it was far deeper in scope than the first project. Given its immensity (perceived or otherwise), I’ve noted several areas where I can improve:

1. Planning

Whether it is during the development phase or during the QA phase, I need to be better about working in a systematic manner. So far, my methods are more haphazard than I care to admit (“Oh, I need to code this! Wait…let me write this section first! Crap…I don’t have this function available.”) This scatterbrained method of writing code is inefficient and makes it hard to work in a logical, linear way.

2. Testing

So, this is related to the need to plan, as discussed above. Above all, my issues stem from laziness, but we all know that, in the end, there aren’t shortcuts when you want to do well. I used to write test plans, and they were super helpful. They don’t have to be extremely detailed, but I do work best when I give some thought to how I am going to test something.

In addition to test plans, I need to remember that there is no substitute for using the debugger, even if the way the script is written makes testing cumbersome. I can’t just read through something and find what’s wrong that way, especially when I’m the person behind the code.

3. Estimation

I understand there’s no way to get around providing estimates regarding how much time things will take, but goodness, I was off by about 60 hours for this project. Granted, I don’t think anyone else realized the enormity of this task, but above all, I just need to realize that I can’t always make a solid promise. This is annoying, I realize, but better to say admit ignorance than to apologize (repeatedly) for missing deadlines.

What I Did, Volume 4

What I Did is a series that documents software development-related work I’ve done the previous week. As the old adage goes, that which is measured gets done, and there’s nothing like broadcasting to the world that you’ve done nothing to motivate the self, right?

I am beyond thankful that this is a three-day weekend.

  • You know that SQL-to-RTF script I was doing and how I said I was done last week? I lied. It spilled over into the weekend, and it is currently in QA. I hope there will be no more changes and moves forward in the QA and delivery process.
  • On Udacity, I started Programming Foundations with Python. It’s a lower-level course, but it isn’t for complete beginners. I know my syntax, but I don’t feel comfortable with my grasp (or lack thereof) of object-oriented programming. This class focuses on that.

I meant to look up design ideas for this blog and the webpage that will serve as my portfolio, but I didn’t get around to that. That’s going on this week’s to-do list, along with my OOP course.

What I Did, Volume 3

What I Did is a series that documents software development-related work I’ve done the previous week. As the old adage goes, that which is measured gets done, and there’s nothing like broadcasting to the world that you’ve done nothing to motivate the self, right?

So, I’ve already broken my commitment for twice-weekly updates, so this WID post will count for both of my posts this week. My blog, my rules, right?

Anyway, what have I done since I last wrote to y’all?

  • I finished the SQL-to-RTF coding for a work project. This assignment is one that never ends, but the hard part is done. Some day, it will stop coming back from QA for design-related elements that I have little control over due to a third-party widget we use.
  • I did a bunch of stuff on Udacity!
    • I finished How to Use Git and GitHub. Then, I promptly forgot about version control and regretted it immediately when I wanted to roll back some a lot of changes I’d made for an assignment for…
    • Intro to HTML and CSS. I started and finished this course, and in addition to learning the basics of boxification, HTML, CSS, and Bootstrap, I produced my first ever page from a provided mock-up (and according to the bots, I’m only off from the original by 0.75%):


What’s next? Python, Python, and more Python.

Book Review: Stephen Pressfield’s The War of Art

pressfield_the_war_of_artThis isn’t a programming book. This book isn’t aimed at programmers. In fact, it’s a book aimed at artists, encouraging them to just do, but the overall message is applicable to programmers as well.

What do I mean when I say just do? Well, I could easily sum up the book in two sentences: Anytime you attempt anything that elevates the self, you will face obstacles that are fantastic at hindering your progress. Those who overcome these obstacles are the ones who are successful. And to be successful, you need to do. The artist needs to paint. The writer needs to write. In my case, I need to code.

I don’t think I’m any different from you. I’m not perfect: I procrastinate, I find excuses, and sometimes, I just don’t do what I need to do and I can’t find it in me to care. In The War of Art, Pressfield refers to this abstract concept of obstacles as Resistance, or

In other words, any act that rejects immediate gratification in favor of long-term growth, health, or integrity. Or, expressed another way, any act that derives from our higher nature instead of our lower. Any of these will elicit Resistance.

Giving this thing, this entity, this whatever a name makes it real, and when something is real, it is easier to see it as the enemy. It is easier to recognize its effects on me, and therefore I’m more able to take action against it. And now that I know what resistance is, I find that my most potent weapon against it is the following anecdote from the book:

You know, Hitler wanted to be an artist. At eighteen he took his inheritance, seven hundred kronen, and moved to Vienna to live and study. He applied to the Academy of Fine Arts and later to the School of Architectures. Ever see one of his paintings? Neither have I. Resistance beat him. Call it overstatement but I’ll say it anyway: it was easier for Hitler to start World War II than it was for him to face a blank square of canvas.

It was easier for Hitler to start World War II than it was for him to face a blank square of canvas. This amazes me, so much so, that just this thought is enough to get me to stop playing games, put down the phone, and get back to work.

Why I love MOOCs for Learning How to Program

I consider the beginning of my software development education to be Harvard’s CS50, which I took via the edX platform. Since then, I’ve tried many other ways of learning, but this post is about why I love MOOCs.

1. They are free.
Sure, you could pay for verification certificates, proof of specialization, and whatnot, but in the end, everything you need is available for free. You get access to the lectures, the assignments, the grading, and the community message boards, which are helpful when you are stuck. Now, free isn’t always good, but this is one of those areas where it is almost unbelievable how good the quality is for how much you are(n’t) paying.

2. You don’t have to decide what you need to learn.
This is great, because, if you’re like me, you probably don’t know enough to know what you need to know (try saying that five times fast). The hardest part of doing something is starting; the second hardest part is to keep going. Having a set schedule and a previously-set list of topics to cover/things to do eliminates any possible decision paralysis (and therefore one fewer thing that gets in the way of completion).

3. You get tools that help you pace yourself.
If you take the course live, you get a schedule that helps you keep on keeping on. If you’re not, you still get a schedule that can easily be tailored based on whenever you started the course. Again, this eliminates a decision you have to make and makes it more likely that you’ll keep going.

4. You get automatic grading.
This isn’t perfect. The automatic graders can only check for correctness, and there are times when the grader can’t figure out why your code did what it did–it only knows that you did something terrible (infinite loop, anyone?). Regardless, the feedback is still helpful, even if it can’t tell you that, really, did you need ten lines of code when two will do?

5. You’re part of a community if you choose.
Because everyone participating in the forum/message board/group is working through the same material you are, you have an easy place to go for questions, comments, and concerns. I’ve found my interactions in these places to be pleasant and helpful.

6. There are MOOCs on so many topics that you’re bound to find one that fits your needs and desires.
From the absolute beginner to the seasoned professional looking for continuing education, there are classes taught be experts on almost any topic you can think of. It seems that the major providers of MOOCs (edX, Coursera, etc.) are STEM heavy, but many are expanding into the humanities and the social sciences.

With all that said, MOOCs aren’t the end all/be all of education. I think the number one pitfall for many people is that they require a great deal of self-discipline. I’ve heard from many around me that they don’t have the discipline for online courses (as opposed to the traditional classroom learning model). If that’s the case for you, MOOCs are even worse, since you don’t even have the accountability of a professor who you see a couple of times over the course of the semester. These are definitely for people who are capable of self-managing their own education.

What I Did, Volume 2

What I Did is a series that documents software development-related work I’ve done the previous week. As the old adage goes, that which is measured gets done, and there’s nothing like broadcasting to the world that you’ve done nothing to motivate the self, right?

  • I’m working on creating an interface that allows users to generate customized letters populated with a specific patient’s plan of care information. I need to return the relevant data from the SQL database, convert the output table to RTF, and populate it into our software’s documents editor. Last week, I converted a legacy SQL-to-RTF script from VBA to VB.NET, so this week, I focused on writing the SQL query that returns the necessary data.
  • I made some progress on Udacity’s How to Use Git and GitHub course. At the beginning of the week, I was just under halfway through lesson 3. At the end of the week, I am just over halfway through said lesson. 😦

Because of the time I spent on my SQL-to-RTF scripts and related queries (oh, and the go-live for a pilot program that I found out about an hour and forty minutes before it occurred) resulted in three days where I worked overtime, I didn’t make as much progress as I had hoped. I didn’t finish the course on version control, I didn’t even touch the intro on HTML/CSS, let alone make it through the whole course, and I haven’t seen Python in about a week and a half.

Here’s hoping this week treats my self-education plans well. The plans:

Simple Programmer’s Email Course on Blogging

In the interest of full disclosure, I want to say that I’m writing about John Sonmez (a.k.a. the Simple Programmer) and his email course on setting up your own software development blog because he told me to do so. But that doesn’t mean that I don’t like it or that it holds no value for you or me. The truth couldn’t be further away.

Over the course of three weeks, you get two emails per week, each with a clearly defined task for you to complete. The perks of this format are obvious: you know what you need to do, you know when you need to do what you need to do, and, most of all, you don’t have to decide what to do.

As you can tell, this blog doesn’t have very many posts on it (yet!). But, I can still tell you how doing this has helped me:

  • That which is measured gets done. The act of writing down what I have done and what I will do makes it easy to see what works, what didn’t, and how I can adjust and plan for the upcoming week appropriately.
  • I’ve been forced to reflect on the work I’ve done as part of generating ideas for this blog. This ties into the point above, in that I have to engage at a deeper level with the material I’m working with, which cements concepts in my mind.

If you’ve ever thought about writing your own blog (or even if you haven’t), I highly recommend John’s course as a jumping-off point. Consider it to be like training wheels that have been raised off the ground: he’ll help you get going, but once you get going, it really isn’t that hard to keep going. I’d also like to mention that, while John is aiming to reach software developers, the principles of his course are helpful even to those outside the field. I shared my emails with my writer husband, who has set up his own blog recently.

What I Did, Volume 1

This is a new series that documents software development-related work I’ve done the previous week. As the old adage goes, that which is measured gets done, and there’s nothing like broadcasting to the world that you’ve done nothing to motivate the self, right?

  • I finished Lesson 2 of Udacity’s version control course (How to Use Git and GitHub), and as of Friday, I am about half way through lesson 3.
  • I converted an old script someone at my company wrote back in the day from VBA to VB.NET. I need to write a script that takes data returned from SQL tables and outputs it in RTF. Obviously, lots of tables, each its own size, are required. Joy.

Lessons 1 and 2 of the course on version control cover the basics of git, and lesson 3 covers code sharing via GitHub. I haven’t used either of these tools outside the course, but I’m eager to integrate these tools into both my work and my studies. I have never used anything more than the most primitive versions of version control (that is, I save multiple copies and label them with different numeric suffixes). This has to be better.

The script for work threw me for a loop at first. For some odd reason, I thought that the output had to be in HTML and only after spending all Friday morning trying to learn how to create such tables using SQL data in Visual Studio, I realized that a)that was NOT what I was supposed to be doing and b)out software doesn’t display HTML in the documents I was to generate anyway. Luckily, I found a script that converted SQL to RTF one of my colleagues wrote back in the day, and after a couple of hours, I had an updated version written in VB.NET

What’s next?

  • Going through Think Python as a refresher. It’s been a couple of weeks since I’ve touched Python, and after the time I put into learning it using 6.00.1x, I’m loath to lose this perishable skill. I also have access to CodeWars, so I’m looking to get back into that as well.
  • Finishing the course on version control
  • Beginning Udacity’s Intro to HTML and CSS