• Portfolio
  • Blog
Menu

Dan Rice

  • Portfolio
  • Blog

Blog

The Highest of Standards

June 4, 2017

Early on in my software engineering course at Bloc, I made the mistake of saying to my mentor that I couldn’t figure out “the answer” to a problem in one of my assignments. The conversation halted while he pointed something out to me: when you consider the many different ways a software developer can accomplish a task, and then consider that said developer can name objects and methods whatever they want, there is quite literally an infinite number of ways to solve any given problem related to software.

I had not intended to imply that there was only one right way to solve whatever problem I was stuck on at the time, but the message stuck anyway. Software problems have infinite solutions, and infinite possibilities. Some may be better than others, sure, but even that is something that’s difficult to objectively compare in many cases.

I was reminded of this during my most recent assignment for my Blocipedia project (which I will be posting here in the near future). I was struggling to make it so that the creator of a wiki on Blocipedia could add collaborators to the project, so that only the creator, the collaborators, and administrators could view and edit those wikis. I kept wanting to accomplish the task by taking the email the creator entered and using it to track down whichever user ID it was associated with, but I couldn’t for the life of me figure out how to do it.

The funny thing is that the solution I came to instead really isn’t much more complex. Rather than finding a user ID, I took the emails the creator had entered and stored them in a group of emails called collaborators. If whichever user was logged in had an email address equivalent to one of those emails, they would be allowed to view and edit the wiki.

For most people, this would probably be a fine solution. And in this instance, I’m going with it myself because I spent like two days straight trying to solve this problem. But I think it’s important to remember as the resident INTJ Bloc student that there are times when I need to push myself to be better and times when I need to recognize that if a solution works, I should use it instead of trying to go back and do it the way I first thought of doing it just because it popped into my head first. As my mentor has pointed out, it’s often more important to ship code than to belabor every tiny detail.

I have always been my harshest critic, so this is a difficult thing to bear in mind, especially when I’m so new to programming. Just like with writing, however, coding is not black-and-white. There’s typically no “right” way to code something any more than there’s a “right” way to write this sentence. There are certainly several wrong ways to do both, but there’s no definitive approach.

The important thing, therefore, is not to make every line of code perfect, since it can’t be. The important thing is to constantly improve, which is exactly what I plan to do.

Post number 7.

Comment

The Secret of Success

June 4, 2017

If you were to approach an average person on the street and ask them what the secret to success is, they would likely either give you no answer, a non-answer, or at best an offhand quote from someone. It’s a strange irony that we are all competing to be successful, yet figuring out how to become successful doesn’t seem to be something anyone puts their mind to on a regular basis.

My mentor at Bloc, however, suggested that if I was interested in the subject of how one becomes successful (regardless of the endeavor), I should look into the essay "The Strangest Secret" by Earl Nightingale, because he actually found the answer.

The answer is this: we become what we think about. This is an extremely useful bit of information to know, and when you apply it to the idea of someone trying to become a successful software developer, writer, musician, doctor, actor, lawyer, parent, martial artist, public speaker, truck driver, politician, astronaut, teacher, or any other endeavor, really, it makes perfect sense.

Yes, some people are born with a natural talent for certain things. Michael Phelps, for example, probably had a knack for swimming at a young age. But it is not natural talent alone that resulted in Michael Phelps becoming the unfathomably talented swimmer he is today; that knack may have provided an encouraging spark to get him started, but it was the practice that led him to all those gold medals (I have no idea how many he’s won; he probably won another in the time it took me to write this post).

Practice. It is practice, and thinking about practicing, and learning how to do a better job of practicing, and focusing on all that practicing to the exclusion of other, less important things, is what led Michael Phelps to become a world-class athlete. Just as Beethoven was born with neither the ideas for his great symphonies nor the talent to compose them, just as Alan Turing did not come by his incredible insights into computer science by luck, so will none of us accomplish anything of value by sitting idly by and wishing we were more successful. This is true of my goal of becoming a successful software engineer, and it is true of any of your dreams and pursuits, too. It’s why your friend who says “I always wanted to be a poet” but never actually reads poetry, writes poetry, or studies poetry will never be a poet, and it’s why people who jealously watch the Olympics saying “I wish I could do that” will never do it because they’re too busy watching the Olympics instead of practicing the sport they claim to love.

The first bit, the first step in becoming successful in your chosen field, is to determine what that field is. But after that, it is all about practice and embracing whatever pursuit it is that you love.

Find the dream, then chase it. Chase it to the ends of the earth, because it is a disservice to yourself and the rest of the world not to do so.

Post number 6.

Comment

The Shoulders of Giants

June 3, 2017

In reference to his own success as a physicist and mathematician, Isaac Newton was once quoted saying, “If I have seen further it is by standing on the shoulders of giants.”

I am reminded of that quote constantly as I do my coursework at Bloc. Something that I didn’t really understand (or at least, didn’t fully appreciate) before beginning my journey as a software developer was how much the work of the past has laid the groundwork for what is done today. Sure, it’s easy to grasp that the work Alan Turing did to construct his code-breaking computer during World War II was massively influential to the field of computer science, or that the Macintosh, Windows 95, and google.com each had a huge impact on humanity’s ability to be productive, communicate, and access information.

But these projects are the big, sweeping changes to the industry that everyone knows about. The thing is, there’s so much more than that. To this day, app developers and web designers rely on operating systems based on Unix (macOS, iOS, Android, and Linux) and MS-DOS (Windows) to run their machines and develop products on, platforms that were first created in the 70’s and the 80’s. We rely on stable internet connections that require a functioning network of cable internet or wireless carrier towers that took years, if not decades, to build. We interact with computers and smart devices through a variety of programming languages, many of which were first written before the turn of the century (Ruby, for example, was developed in the 90’s). And we haven’t even talked about all the hardware engineering required to make processors, displays, RAM, and hard drives interact.

I suppose my point is that I’ve gained a great deal of respect for the years of work that led us to today, when a teenager at Starbucks can Google the Great Depression and find a webpage that tells them exactly what led to the biggest economic collapse in history within seconds. And yet despite the marvel of having highly portable computers in our pockets (smartphones), it’s become a common refrain to talk down about technology. It’s referred to as “stupid” and “distracting,” people say it’s killing our interpersonal skills, and many yearn for the days when we still hunted through encyclopedias to get our information and sent letters through the mail.

And to some degree, I understand their concerns. Change makes people uncomfortable. It’s weird reading a book on a Kindle after reading them on paper for so many years, it’s weird seeing people so immersed in their smartphones everywhere they go, and it’s weird purchasing a digital song or a movie without any physical representation that it’s been done.

But as much as I understand those fears, I disagree with the notion that technology is making the world worse overall. The smartphone in your pocket doesn’t have feelings; it doesn’t act in a good or bad way. It’s simply a tool. Like the television and the computer before it (both of which were described as the killers of family life and social time, too), your job is to decide how to use it.

Instead, I feel that the primary thing technology has accomplished is to empower people. Our access to information, to jobs, to new opportunities in the arts and sciences, and to communicating with each other has greatly improved because of the advancement of technology. It’s easy to take it for granted and criticize it, but after seeing all the work that’s been done to make both using technology and creating software easier, I find I have a greater appreciation for these advancements than ever.

And improving upon the work done by the giants before us, to me, is a great goal to strive toward.

Post number 5.

Comment

Growth Through Struggle

June 3, 2017

Programming is a difficult beast to deal with when one is first learning it. For one, understanding it conceptually is not something taught in schools. In learning Ruby on Rails with Bloc right now, I’m starting from what is literally ground zero: I didn’t understand classes and methods going in, or the model-view-controller system that websites use to interact with users and databases. That means that I’m not only trying to keep up with learning Ruby syntax (which, to be fair, is easy by programming language standards), but I’m also trying to learn rules about programming in general on the fly.

In other words, when I get stuck on a problem I’m often reminded that I’m not just learning a new language; I’m learning my first language.

For another, the sheer amount of content is frustrating. Just when I feel like I’m starting to get an idea of what I’m doing, Bloc starts teaching a brand new concept that I realize I could never have done on my own. What’s more, it’s not as though the new concepts I’m learning seven weeks into my software development course are random tips and tricks Bloc is throwing at me; they’re very applicable tools that I’m likely to need at some point when I get a job in software development, so I can’t just blow any of it off.

But, as Dory would say, “Just keep swimming!”

The good news is that the farther along I go, the clearer it becomes that this is all intentional. Bloc’s goal (and my goal) is for me to come out of the course understanding software development, and to accomplish that in a year, I have to accept being challenged constantly, pushed harder. Being taken out of my comfort zone has made me learn much faster than when I’ve attempted to go at my own pace through other online courses (the free ones that don’t have deadlines and a mentor pushing me along). It’s essential for me to be immersed in what I’m learning.

Right now, this is important for me to remember. I’m struggling with an assignment that will make it so when a user favorites a post on my project website, Bloccit (a Reddit clone), and another user comments on that post, they get an email. All the code seems to be working. No errors are thrown up when someone favorites a post or comments on that post. The problem is that I’m not receiving any emails.

But I will push on. As frustrating as it is to be learning the fundamentals of a concept and to be tripped up on what are clearly the simplest of tasks, I think it will be worth it in the end.

Post number 4.

Comment

The Importance of Always Learning

June 2, 2017

When I was younger, I made the mistaken assumption that most of one’s learning should take place during childhood. It was sensible given my environment; modern society gives us this impression by making us go through most or all of our formal education at a young age.

But it’s also a bad assumption. I would argue it can even be crippling if people presume that they know everything they need to know because they have a college education (or worse, merely a high school education).

That’s not to say that everyone needs to go to college; far from it, especially given the exorbitant cost of higher education in the United States. But I do believe that people need to be willing to continue taking in new information so they can learn and grow all their lives, rather than becoming sixty-five-year-old retirees with all the wisdom of a teenager.

I am currently trying to rectify my mistaken assumption that I had all the skills I would ever need when I was twenty-two years old, and the way I’m starting is by learning to program. Sure, I knew the fundamental skills (reading, writing, speaking, math, the usual suspects) that one needs to get an average job, and I picked up a passing talent at salesmanship mostly by accident during my time in the workforce. But I finished school with no skills that I loved to hone and practice that would allow me to stand out in the workforce. I was lost.

Fortunately, I found programming, which is a completely foreign skill to someone who graduated from college with a Communications Degree. Even though it’s often disheartening and frustrating to learn something so different from any other skill I’ve acquired in my life, I love doing it. I love building websites with Ruby on Rails, blending together several different languages (HTML, CSS, JavaScript, and, of course, Ruby), integrating the models, views, and controllers that form the site, and creating the classes and methods that form those.

Sometimes I want to throw my computer at the wall when it reminds me that I’m so new to this. It can be frustrating for someone who sees themselves as a functioning adult to struggle to write even the simplest lines of code properly. In some ways it feels like going back to elementary school, starting my education all over.

But let me tell you this: despite the challenges, it is so, so worth it to pick up a new skill. Aside from the fact that new skills like programming can offer new (and better-paying) job opportunities, it is a strangely wonderful feeling to learn new things again, especially when it’s by choice (rather than by law, as most of public education is). Whether you want to learn programming, photography, writing, filmmaking, canoeing, martial arts, or differential calculus, I highly encourage anyone (especially those of us who are done with our “official” education) to spend time learning something new. It can be challenging, yes, but those challenges make it all the more rewarding.

Post number 3.

Comment
← Newer Posts Older Posts →

Latest Posts

Featured
Nov 20, 2023
Job Hunting, Part 2: Application Tracking
Nov 20, 2023
Nov 20, 2023
Oct 19, 2023
Job Hunting, Part 1: The Resume
Oct 19, 2023
Oct 19, 2023
Dec 29, 2021
On Fatherhood
Dec 29, 2021
Dec 29, 2021