Showing posts with label programming. Show all posts
Showing posts with label programming. Show all posts

Saturday, January 2, 2016

Re-dream: 2016 Resolutions

I am listening to an audio book in which a fortune teller tells the main character, "When your dreams all come true, you must re-dream."  She went on to say that you can't live in the past or settle for being content.  You need something to work towards, a new dream of what your life can be.  I can't think of a more appropriate way for me to look forward to the new year and 4 - 5 year outlook than that. 

I sometimes have anxiety over setting goals and making resolutions, because I am so ambitious that I want to set lofty goals, and then I am hard on myself when I fail to achieve those goals in the given amount of time.  But coming out of 2015, I have a renewed energy, because perhaps for the first time in my life, I kept all of my New Year's Resolutions.  In 2014 I accomplished most of my resolutions, with the exception of leaving the country, and getting down to a size 10.  In 2013, my resolutions were pretty much just whack-a-doodle, and in 2012 I had far too many and clearly lost focus.  I set 8 resolutions in 2011 and accomplished none of them.  From this trend, I suppose one could deduce that I have either gotten better about keeping my resolutions, or setting better ones. 
The weight goal is always tricky; its the most common resolution and perhaps the hardest one to keep.  Many of my resolutions are fairly finite: do this one thing and it's complete.  But getting down to a certain size or weight takes continued, renewed effort, and can be un-checked faster than it can be checked.  I didn't set one last year, and if I had, I most certainly would have failed it as I am about the same size and shape as I was a year ago.  So, I am very cautious to set such a goal, but part of me wants to.  Hey, if I was able to commit and accomplish the 8 goals I set in 2015, why not? 

Well, there's the catch.  I didn't do a great job of accomplishing all of my New Year's resolutions last year.  Some of them were barely checking the box.  Part of me wants to believe that if I set goals and resolutions that encourage me to be healthier, like working out every day or make good choices in food, that the weight loss will come.  Part of me thinks that I will get to a point where I've decided it can't be done, and will give up and feel defeated.  Part of me thinks that my other goals run contrary to weight loss - like learning programming. 

The truth is that, despite my success (or maybe just luck) in 2015, I am not really sure how to set goals that I will commit to and achieve.  Sure, we've all heard of the SMART goals, Specific, Measurable, Achievable, blah blah blah.  But I am not convinced those work.  Same with vision boards, where you are supposed to choose images that inspire you and hang them where you will see them every day.  I've had inspirational quotes around my house for years, and they've done nothing to stir my energy.  Accountability partners have failed me too.  And more importantly, I think we should be able to keep ourselves accountable.  We should be able to set out to achieve something, and then achieve it.  A year is a long time.  In fact, we have a little more time in 2016, with it being Leap Year.  I should be able to accomplish just about anything in a year.  But, losing weight won't happen on its own just by setting a goal or sitting down one night to knock it out.  I think to lose weight, you have to set smaller goals.  Eat a salad twice a week.  Work out four times per week.  Walk 10,000 steps a day.  Something that you can strive for in a much shorter term. 

My other problem is that I like variety.  I thrive on it.  Sometimes it bothers me that I lack focus; I don't have that one burning passion in my soul that I would quit my job for and work at day and night.  But I think I've just about decided that that's just me, and that's okay.  So, I'm not going to say that I'm going to write every day of 2016.  Hell, I didn't write at all yesterday, so that boat has already sunk anyways.  In September, I wrote a blog about "A Kinda Really Sorta Perfect Day," in which things didn't really go my way and I wasn't perfect, but I persevered and got things done.  Since then, I've been tinkering with the idea of what makes a "good" day or a "perfect" day.  What I've come up with in the last several weeks is a better formula for success for people like me.  Rather than a strict checklist of things to do every day or every week, I have developed a buffet of sorts.  Here's how it works: I've grouped activities into 6 areas of life.  Each area is something we can all probably improve on.  A good day is completing 3 of those activities, covering at least 2 of the areas.  A perfect day is completing 6 or more of those activities, with at least one in every area. 

Something for the mind:

  • Practice a language
  • Read / listen to an audiobook
  • Take a lesson in programming
  • Do coursework
  • Take a quiet, hot bath; breathe and let your mind rest

Something for the body:

  • Stretch
  • Dance
  • Go for a run / walk
  • Hike
  • Ab workout
  • Lift weights
  • Thighmaster
  • Other form of exercise

Something for the soul:

  • Write
  • Cook a new or tricky dish
  • Build a Lego model or Lego sculpture
  • Design something
  • Paint
  • Craft
  • Create something else

Something for the heart:
  • Pay a colleague a sincere compliment
  • Have a real conversation with someone
  • Call a friend or family member on the phone
  • Have lunch, dinner or drinks with someone
  • Send a card or letter (via real snail mail)
  • Volunteer or do charity work
  • Help a stranger with something

Something for the wallet:
  • Apply for a job
  • Schedule / post on social media for business
  • Eat in
  • Create a graphic, blog or tool for business

Something practical:
  • Empty dishwasher / load and start dishwasher
  • Take trash out / take recycling out
  • Do laundry
  • Clean the bathroom / kitchen
  • Get oil change / tire rotation
  • Pull weeds
  • Other chore

So now, I've made one of my resolutions to have 366 "good" days. In theory, this means that most days I will be doing something good for my body, and the days I'm not doing good for my body, I am doing good for my mind, heart and soul, which are ultimately good holistically anyways.  Also, I believe firmly in making good habits by doing something consistently for a number of days.  I've heard both 21 and 90 days, so I like how this graphic puts it: It takes 21 days to create a habit, it takes 90 days to create a lifestyle.  Imagine what would happen if you succeed in being "good" for 366 days! 

The first resolution I made was around learning programming.  I know a bit of HTML, and I regularly program in VB for work.  But I do not consider myself a good programmer, or really a programmer at all.  It's like how most people know how to write, but that doesn't make them writers; I know how to program, but I am not a programmer.  I have a lot of entrepreneurial ambition that is wasted week after week and month after month because my lack of programming skill prevents me from doing the things that require programming.  I dream of collaborating with a talented, brilliant programmer and partnering with him or her to create this massively successful company.  The problem with that dream is that most programmers are in so high demand they are not really willing to work with a business person like me on my idea, and if they were willing to work on such an idea, they would just as soon start their own company without said business person.  I preach that programming is such a powerful tool that I believe everyone should learn it to a degree, so I've had to swallow the pill that I, too, could use some work developing my skills.  


I have an idea for a better social media management tool that I've been toying
with, and of all my brilliant ideas, this is the one I'm most sold on at the moment.  Of course, a competitor could sweep in and build it before I even learn to program, but that's the risk I suppose I have to take.  And, learning programming will only help me with my next brilliant idea, if that happens.  So after a bit of research, I've settled on HTML, CSS and the Twitter API as my focus for this year, and I'm going to use Codecademy.  It shouldn't take a year to get pretty good at those things, especially because I already know some HTML and CSS, but I want to keep my scope small and get really good at them.  If I am successful, I can then start programming my dreams, and can learn new languages as needed in the coming years.

I won't go into detail now about my motivation for the rest of my resolutions.  I am excited, though, that if I am as successful in 2016 at checking off these boxes as I was in 2015, that great things will happen.  So, with that, here they are.

New Year's Resolutions for 2016

  • Learn HTML & CSS & Twitter API
  • Spend a Weekend Disconnected
  • Design & 3D print something
  • Make a video with Jaiman - performing music, dancing, audition for a reality show or something silly
  • Improve my home in some way
  • Learn Thriller choreography
  • Have 366 "Good" Days

These aren't terribly ambitious for a 366-day year (except making a video with Jaiman, that will take some effort since he is SO camera shy).  They are vague enough that if something specific doesn't happen, I can still check off the boxes, but they are specific enough that I will know when I've accomplished them.  Maybe that is the trick to setting goals, being just specific enough. 

If I've inspired you to make your own New Year's Resolutions, please comment below and let me know!  Also, check out my post from last year, where I provide ideas for tangible, achievable resolutions ideas

Sunday, March 29, 2015

The Three Things Everyone Should Learn: Number One

Programming

I am not a college professor, nor a professional programmer, but from time to time, I get to impart some of my computer-related knowledge and skills to students of varying levels of ineptness.  I structure my classes in a way that everyone in the class learns something useful that can be applied in their own lives.  This is not so easy, because some of my students

have taken classes on the exact same topics as I am teaching, some are very skilled at those topics already, and a handful of my students don't know the difference between a right-click and a double-click.  But I start off every class with one key point: computers were created to be programmed to make our lives easier.  Computers were not invented so that we could check email, post selfies to facebook or play games, although these are all clever and arguably beneficial resultants of the age of computers.  No, computers were made to solve problems that we could not solve efficiently by any other means.  Therefore, when I think of programming, I do not think of it as a field of study, nor do I think of it as a thing for only the geekiest smart people in our society.  I've been programming all my life, often without realizing it, without connecting the dots in my path of development as a programmer, and when the option to study programming was presented to me, I ran for the hills.  Hell no, I don't want to be a "programmer."  But the power of programming is so compelling that, despite resisting programming as a profession, I cannot turn my back on it.  The truth is that I'm lazy when it comes to work.  I like to think big thoughts, taste fantastic food and drink, travel, experience neat things, but I don't particularly like working.  I like my profession, actually, but I don't like the tactical day-to-day tasks.  I have always taken exception to the mantra that if you love what you do, then you'll never work a day in your life.  I call shenanigans on that: every person I know has had to work, even if they love what they do.  There are just some aspects of having a job or running a business that are less pleasant but necessary.  So I've developed a mantra for my work that has soaked into the culture around me: if you do something the same way, repeatedly, following the same exact steps, then it should be automated.  This mantra is especially true for tasks that take an extensive amount of time, require instructions to do manually because there are so many steps, or are prone to mistakes when the steps aren't followed.  Imagine if every tedious task you had to do on a daily, weekly, or monthly basis was automated and completed within, say, 30 seconds.  How much time would you have to think strategically and creatively?  How many hours would you spend with your family or doing things for yourself instead of putting time in at the office to finish that report?  At its highest level, this is called exception-based management.  Spend your time on the exceptions, then oddities, the things that were so unforeseen that you wouldn't have known to program a computer to answer it, or you wouldn't want a computer to answer it.  Let the computer handle the rest of the monotony.  

Programming is, in my opinion, one of the most important, and overlooked, skills in today's society.  If you sit at a computer all day, I believe you probably could use some automation in your life.  If you have to email, post, learn, stay on top of, practice, sell, buy, look up, research, or write anything, you probably could use some automation in your life.  I may be a little biased from my own point of view, but my hope was to basically cover everyone who gets paid to do something, in the scope of "needing automation in your life".  I am positive that everyone could use automation, in their work, in their education, in their personal lives.  And we are living in a very exciting time of rapid growth and development in this area - a simple search on your favorite app store proves that for any generic task you can think of, there's an app for that!  Awesome!  
So if people are already writing apps for things, why does everyone need to learn programming?  Developers only write apps for one of two reasons: they see a need and believe that they can make money from it, or, they have a need in their own lives, and don't mind sharing it with others who also have that need.  But developers aren't the only people who have needs, right?  Heck, developers I know are the least needy people in my life: they have no need for clean clothes, showers, a neat home.  Just give them a cot, food and a computer and they're happy.  I kid, of course, I love my developer friends, they are some of the smartest and most interesting people I know.  But why should non-programmers sit around and wait for some developer to come along and write an app to solve our problems?  What if they never do?  Don't we have needs that are unique to our professions and situations?  Might there be novel needs that could be automated without a college degree in computer science?  My answer is yes: we all need to know how to program because we can all improve the world around us, make our lives simpler and easier with automation, so that we can get back to doing what we enjoy faster.  

I say that everyone should learn how to program, because I know that if I just said, "some people should learn how to program" or "one person in your organization should learn how to program," the very laziness that drives me to program would drive you to say, "she's
probably right, we need to get someone else to learn how to program."  Or in terms from our playground days, "Not it!"  I say everyone needs to learn how to program because some of you will not try, some of you will try and fail, and some of you will try and succeed.  And yes, having a few people on a team be very good at programming is awesome, because they can usually carry the automation needs of the whole team.  But I will caution this: when I write some piece of code to help answer a problem in someone else's work, I can only program what they tell me it should do.  When I write code for my own work, it not only is better logic because I have more insight into the problem and solution, it gets better with time as I use it and think of ways to make it faster, more helpful and more accurate.  In fact, I've written code for people who were in a position higher than my own, they have used it and were appreciative of my automation, but down the road, I took over their responsibility.  Managers are so funny when they give you more responsibility, aren't they?  They can rationalize it in such clever ways, in this case, "You're already familiar with the report because you automated it, so this isn't too much more than what you already know."  But inevitably, when I take over responsibility for something that I had previously automated for someone else, I find that they missed a lot of opportunities for further, better automation.  

Early in my career, I often found myself thinking, "If I only had a programmer to partner with, we could do so much..." As I've grown, I've realized that working with programmers is complex, because you have to be able to correctly identify your problem and describe the desired solution.  It is much harder to do this if you do not understand the logic of
programming.  It is also difficult to troubleshoot the inevitable problems that arise, if you don't understand for yourself what the code is doing.  All too often people blame the code, "it must be broken," rather than realizing that their inputs were incorrect.  The best-written code will solve for the more common possible human error, but once a macro is involved, any and all problems are blamed on the code, rather than on the user.  For this reason, people who are not in the profession of programming often are reluctant to help others because they are then liable for troubleshooting and fixing any and all problems that come up.  It is so much more empowering for individuals to write and own their code; you can customize it and tailor it to your own needs, you can rapidly develop and test improvements, you can troubleshoot (and find your own errors instead of having that angry developer rub your nose in your mistake), you can adapt it to changes in the inputs and output requirements, and you get a sense of pride from creating such a work of artful automation.  Putting the responsibility of programming on someone else's shoulders can be hurtful to them, less-than-optimal for you, and dangerous for both of you.  So, learn how to program.  Everyone.  

Having hopefully made my point, I will get off my pedestal and give you some practical, actionable advice on how to get started.  If you use Microsoft Excel or Access a lot in your job, I would recommend learning VBA, Visual Basic for Applications.  It is a modified version of VB, Visual Basic, so taking a VB course or getting a VB book would help familiarize yourself with the syntax and logic.  Start by Recording Macros in Excel or Access, and then examine the code.  Use the Internet, a class, or a book, to learn some basic concepts: declaring and using variables, "If" and "Select Case" statements, "For" and "While" loops.  Modify the macro you recorded using these concepts.  Bam!  You can solve a ton of automation needs in Excel and Access.  If you need to monitor a specific website for certain changes, or interact with a website to gather certain information, learn VB.  In both cases, you may also want to learn how to write CMD script to automatically run the macros and programs that you've programmed.  Learning basic programming of any kind, like Java, will help you better query search engines on Google, Amazon, and ebay.  Google Alerts is very helpful, but only if you set it up correctly using the best search syntax, for example.  For writing SmartPhone apps, I believe Java is still the best place to start, and there are several websites that offer free, yes, FREE, classes on how to program.  MIT offers open courseware for introductory classes, Coursera also has free college classes, Treehouse, Codecademy, Udacity, and Khan Academy are just a few of the available resources offering free training on programming topics.  The only problem with this approach to learning how to program is, well, you.  Until we develop the technology to download knowledge into your brain directly and immediately, you are going to have to set aside time to take these courses, go through the examples, and try programming.  And, if you're like me, you're lazy, so it is not easy to do.  If you go this route, I would recommend having a fairly simple, but useful, application idea in your mind; you want something to work towards and achieve that will give you immediate feedback on the usefulness of programming.  Learning to write, "Hello world," and sorting fruit by color are hardly helpful, but courseware has to provide generic, easy-to-understand examples for you to work through.  Having a project in mind will help solidify concepts that you can immediately apply to your idea.  If motivation and willpower to continue is a particular problem for you, then you may want to seek out a community college course or another class with regularly scheduled meetings that you pay for, to incentivize you to go and continue going and to get the most out of it.  

Learning to program, like most things in life, takes initiative to do.  But since not everyone in your office is going to do it, I can almost guarantee it will make you stand out among your peers.  Just be cautious not to be pigeon-holed as the programmer, if that's not the career path you want to take.  Take it from a non-expert expert, I can put code together but I am by no means a programmer, but the power to automate simple tasks has been a key driver in my ability to succeed in my field.  With great power comes great responsibility, and programming is the closest thing I can think of to a real-life attainable super-power.  Besides, computers were meant to be programmed.