I've been continuing to take classes despite working as a full-time developer. I work in the .Net world, but my heart is more in Python. Still, I wanted exposure to plenty of others and I'm currently in my second class on C++.
What I have noticed in the various courses I have taken at institutions of higher learning is that they don't teach anything remotely close to the real world. I know this is a common claim and people cry out against the undergraduate program not preparing people for the real world. I get that. But I have always dismissed them.
Being a better, more rounded thinker is more important than job training, is it not? Surely it is.
I'm not sure why no one slapped me. I've had that discussion a number of times with people. I should have been slapped. Now don't get me wrong. I value and love my education. I have a degree in Politics from the University of New Hampshire. I am versed in various literature and can hold discussions on a number of topics (at one point I could almost do so in French).
But this is a false dichotomy. It's as if the premise only allows well-rounded education or job training. That's ridiculous.
I believe what Computer Science majors need is less Assignment-based instruction and more Project-based instruction. Random assignments that are isolated from each other, meaning accomplishing one has no effect on accomplishing another, don't provide the type of reinforcement that maximizes the mind we need molded in academia. Completing a larger project with multiple parts is far more useful to the student. These parts interact with one another. One of the best lessons to learn early on is that changing code in one place can have small or large effects on other parts of code.
It's difficult to learn that in assignments that are 50-150 lines. But if you're building on top of the product/project you're working on all semester, you will naturally run in to those types of consequences and suddenly your student will begin to think very differently. I value those that can think holistically about a product rather than the frustratingly common linear thinker that says to the team "Well, I'll just change this and then it'll be fixed." I love it when I hear someone say "Well, if we change that there could be implications to these other parts."
Admittedly, I think there's a lot of cruft in undergraduate coursework these days. Taking art history doesn't make you a better thinker per se. You don't experience art in an art history class. You learn what you need to say about a particular painting/sculpture/etc. in order to demonstrate knowledge about the piece. We cannot say that a mathematics major is more well-rounded for taking such a course. Well-rounded according to whom? And how pompous to believe that one semester of being told what to think about paintings and what is meant to be conveyed by them makes an individual more well-rounded.
There's value in education for the sake of education. I don't argue against that and in fact, as a serial student, I'm quite fond of education for its own sake. However, the prototypical pedagogy associated with the usual assortment of subjects and course material falls short when it comes to Computer Science. Programming is a craft. It takes years to master. There are many other disciplines where this is similar, so why not change the teaching style?
Students experience a couple of introductory courses and then are expected to understand high level concepts. In my opinion, going through academia has the primary purpose of learning how to think which implicitly means application. Anyone who argues against that should be beaten with a stick. Socrates explored the meta, but he focused his knowledge on teaching and applying - even if the application was theoretical (see The Republic). If our goal is to teach people how to think, let's make use of the discipline. Sorting arrays is great. It's very helpful to understand a binary versus bubble sort and why one is faster or better in certain scenarios.
But we're a community of people that build things. We command the electron to do our bidding. We engage in digital alchemy. We are the citizens of an industry governed by Moore's law and yet we tacitly accept that there's not a better way to gain an education in our medium?
I reject that.
Let's build better coursework by building projects with students. When a student ends a semester with a (probably) working application that has been built in stages with a decent feature list there is a sense of accomplishment and a demonstrable grasp of the concepts this project instilled.
Cowboy Code Review
A Texan living in Colorado discussing technology, education, and design.
Friday, March 7, 2014
Friday, January 31, 2014
Motivations, Projects, and Resolutions
The new year is a time to reflect and decide on what to focus your energy. Or, in some instances, reflect on what projects you didn't finish. I like to look back and evaluate what projects from the past year deserve more energy, deserve to be let go, or need more development before they're viable.
I keep a small notebook that fits comfortable in my jeans pocket for writing down ideas. Some I'll flesh out and try to find the minimum viable product (MVP). Some I simply like to flesh out and think about the 'cool' factor. Things that increase cool factor:
Real-time
"Post and response ... is kind of boring. I think most people have become accustomed to see the spinning wheel load your results."
This has got to be a trendy thing, but it also makes software so nifty these days. Things like 'real-time collaboration' or sharing or feedback. They all make software feel not only faster but engaging. Post and response, where you post data and are then rendered a results view, is kind of boring. I think most people have become accustomed to see the spinning wheel load your results.
I know at my day job I see that wheel all the time when I'm doing tests. We're in the midst of launching a new version of our UI for the main part of our product and while it's beautiful and super fast, there's one part of the software that actually now takes longer to load - the piece that hooks into a government integration (of course). The overhaul didn't cause this per se. It was very well designed and load times across the board are reduced. But its new architecture requires a certain flow and as such, all operations for this one piece have to be re-rendered frequently. To ensure data integrity on what's coming back from the government service, I have to query them (the government) to get the latest results. This all occurs in real-time but the service is slow and unfortunately doesn't provide a fast way to get the relevant data. It was totally over-engineered. At some point I plan to change that, but for now I'm kind of stuck. Some of the load times have doubled in the new system for this one piece.
Social
"Social also means having a community. If you build a community, meaning forming a common culture around a topic, idea, belief, etc., then you're more likely to attract more people from that pool."
Ideas these days tend to have some social component. Sharing an achievement in a weight loss tracker or a ride you just completed. Not to mention the calls to action to share that you're using a given product. Moreover, it's almost more popular now to use social authentication instead of having a database containing usernames and passwords that you have to protect. This makes sense - now the concern is not on you if the password store is compromised, you simply send out an alert email to your affected customers saying "due to the recent ... at <social network>, we'd recommend you change your password to protect your data at our site. Please click <here> to view details about the announcement from <social network>."
Social also means havinthem g a community. If you build a community, meaning forming a common culture around a topic, idea, belief, etc., then you're more likely to attract more people from that pool. Word of mouth campaigns are more budget friendly for you than spending time and money trying to advertise your project to form communities of one. It's always a good idea to test your idea against the possibility of building a community with it. Not all ideas can work that way - some are targeting very specific use cases and that's ok.
Feedback
"Feedback isn't just about getting criticism and praise from your users - it's about getting data on how they use the product."
Having an excellent feedback system users want to utilize instead of avoid is valuable. For one, your feedback loop is tight and you understand the people using your product. Getting flooded about feature X having a bug or needing new functionality? Awesome. No money just went out the door to get a 1 in 50 response rate. Fix it and fix it fast and tell your users how much you appreciate their help in making the product they use better. This reinforces the community idea mentioned above. Empower users to be able to provide you feedback in an unobstrusive way - don't hound them. Let them choose.
Feedback isn't just about getting criticism and praise from your users - it's about getting data on how they use the product. Think about analytics early. When your users creates a new item using your service and sends an invite through the service to a friend's email, track it. And track whether that friend signed up. Now you've got analytics on conversion rates from first-party referrals.
Motivations and Resolutions
This year I have some simple goals:
1. Write more blog posts
I need to be more consistent. I have a number of article topics I have written down in my notebook I would like to complete. I keep listening to podcasts that mention you have to just sit down and write to form the habit, and that's something I need to do. I am out of practice at that. Now when I sit down at my computer at night, once my son is asleep and the house is quieter, I tend to go straight to projects. I need to start scheduling time to write at least once a week, specifically in the realm of tutorials or sharing experiences about how I solved a particular problem.
2. Engage on Twitter
I was one of those that used to make fun of Twitter's core concept - share in a limited character amount. I tend to be verbose. Sometimes overly verbose. I took almost every writing intensive course offered in the political science department at the University of New Hampshire because writing several papers a week was easy for me - I could always crank out more words. Twitter limits that and forces you to focus tightly on what you want to communicate. I've been using it for a few months more actively and I find wonderful and copious amounts of information on topics that interest me. I'd like to build a bigger network there of like-minded people so that I can continue to tap that resource for inspiration, help, and the comfort of being of member of that community.
3. Pay It Forward
I have received help from a number of community members as I have learned what I know. My formal CS education is extremely limited. I'm currently completing pre-requisites to enroll in a Masters in CS program, but I earned my software developer position as a self-taught programmer. This means I've accumulated a lot of knowledge by the generosity of others. So I'd like to return the favor. I plan to be making posts discussing implementation strategies, coding tutorials, and some design information.
4. Release a Web Application to the Public
I have been working on an application for a few months, mostly figuring out what I want it to do and doodling on my sketchpads, but I've been coding in small bits here and there over the past month. I'd like to finish this application and get it out to the public. Mainly, I'd like to be a user on this site. So I believe others will want to as well.
I hope those reading this reflected on the last year and have come to decisions about what they'd like to do in 2014. If you'd like to talk to me about code, or hire me as a freelancer, please contact me on Twitter, Google+, or at my website.
Tuesday, December 3, 2013
Planning, Podcasts, and Purchases: The One About Design
I've decided to take a more structured approach to how I'm building my latest project. It's easy to get excited about a new project and want to run rather than crawl or walk your way into it. But I've had a few lessons over the last couple of years that I imagine most (aspiring) code monkeys programmers go through.
Naturally, I couldn't wait to show my son.
And a discussion about the pictures.
Needless to say, I'm absolutely going to go around recommending them to anyone in the dev/design world. I can't wait to place my next order. These guys are fantastic and the quality of the products they sent out is wonderful too. The sketchpads and stickies are on paper that has weight to it. It doesn't feel cheap and it's a joy to write on.
So since you made it this far, take a minute and go check out their site. Some of the videos on the product pages showing how to use them are pretty fun time lapses. There's definitely a lot of value as a developer to step back and look at a project from a design point of view. And I think in the future, I'm going to approach more projects this way. Thanks to the Lowdermilks and UI Stencils for changing the way I think about the process.
- Planning is better than refactoring x factorial times (yes, that would be a large number).
- Refactoring is better than scrapping the project (there are exceptions).
- Having an overall idea of UX from the beginning is helpful to steer the project.
So with that said, I decided to start thinking about this project from a top level view. I wanted to plan out the UX somewhat with some sketches. Using a pen and doodling on legal pads and napkins really forced me to think about what I wanted. The trend these days is toward simplicity. Skeuomorphic designs are transitioning to more flat designs. Microsoft is probably my favorite example of that.
At the same time, I have been listening to a lot of podcasts since the summer. I haven't been a podcast listener before, but at some point over the summer I decided that I was no longer going to be listening to music or NPR. Car time meant learning time. And thus I feasted on episodic backlogs of some shows. One in particular is a fantastic listen. For starters, it's entertaining. But it has some really excellent tips that span languages and paradigms. I'm referring to The Windows Developer Show by the Lowdermilks (Ryan and Travis - if they ever read this, I went alphabetical with your names...it could have just as easily have been Travis and his co-host Baby Man).
The brothers both work at Microsoft in different programs. Ryan's a Developer Platform Evangelist, or the guy you go to if he's your area rep to learn about / ask for stuff. The local DPE here in Denver is awesome (go Jerry Nixon!) and based on what you hear on the show, Ryan sounds just as passionate about helping out his developer community. Travis is on the team that works on Visual Studio and he does UX. So you have a nice blend of design inspired views mixed with development views. And, of course, both cross over. At the end of every show, they do a developer tip of the week (Ryan) and a Designer tip of the week (Travis). Going through the older shows and working my way up to present, I came across a design tip that I found fantastic: UI Stencils.
If you haven't seen this site and you do anything related to development, check this site out. I had seen it before but it had drifted to the back of my mind as "not for me." I was so wrong. Developers are able to accomplish a ton in a short period of time with some of the web frameworks and libraries that are out there now. Working with Rails lately has certainly shown me how productive I can be late at night even when I'm not all there. But a lot of us (read: me) need to put more thought and effort into the designs we're putting out there. My office doesn't have an in-house designer. The developers all do it. And that's fine and we get the job done, but I know we'd have a much more modern, sleek, and interesting interface if we had someone that was actually a designer. Perhaps our three-man development team should read Travis' book.
So enter UI Stencils and their awesome-sauce. They sell tools to help make designs. I bought this sketchpad and a couple of these browser stickies. And I'm hooked. Talk about awesome. It has been a wonderful experience to force myself to think about things in pen and paper because it's unforgiving. I'm sure not everyone will agree with that, but forcing myself away from the keyboard and actually drawing out how I think it should work saves me time. I can draw a column setup and play around with where I want something on a piece of paper much faster than I can get that layout perfect on a web page even with Bootstrap or Foundation.
I've done mockups in html before with a framework, and it works. But I find I obsess more about whether I got the pixels lined up instead of whether the UX is well done. The pen and paper allows me to abstract the concerns away. It makes me think "is this intuitive" instead of "what css class will make it do that thing?"
As if it weren't awesome enough that I'm getting mental exercise benefit out of this, it turns out that the folks at UI Stencils are freaking awesome.
Often when I order food online, I'll ask for something random in the notes section. Ya know, that section that's really for comments about your order. Like "leave off the blue cheese." Instead, when I order Chipotle online I say "make with love." And for some reason, at almost every Chipotle that gets that request, they draw a heart on the burrito's foil wrapper. I like that. It's fun customer service and engenders customer affection. I've asked Domino's to draw a dinosaur on the box before. And my pizza showed up with a T-Rex in sharpie on it. It was awesome.
I have a two-year-old son who currently happens to be obsessed with three things:
- Dinosaurs. His first love. He often turns on Walking with Dinosaurs and then ushers Mom and Dad out of the room so he can run around the living room roaring. It's fantastic.
- Penguins. Or as he calls them, cheep cheeps. He has a stuffed baby emperor penguin that his aunt gave him and he takes that thing everywhere. He absolutely adores it.
- Cats. Or neee-ooows. He's taken to pretending he has a cat that lives in his pocket lately. In fact, this past weekend he gave me one to live in my pocket. I have always wanted a cat that goes with me everywhere. Thanks to my son, I now have one.
When I placed my order with UI Stencils, I was feeling rather silly. My wife was giving me this as an anniversary present and I thought it would be interesting to ask a bunch of design driven persons if they would draw something on the package for me. In the notes section, I put the following:
Can y'all draw a special picture on the box for my son? He loves dinosaurs, penguins, and cats... Just sayin', that'd be awesome.At the time I thought when the package arrived, if they did something like that, then my son would be excited to open the package with me and get to keep his special part of it - the picture. When the package arrived, I couldn't help but burst into that silly, joyous laughter you get when someone or something just makes you feel fantastic. Someone was nice enough to draw all three pictures.
The Package |
Naturally, I couldn't wait to show my son.
![]() |
Happy Progeny |
![]() |
Neeow |
So since you made it this far, take a minute and go check out their site. Some of the videos on the product pages showing how to use them are pretty fun time lapses. There's definitely a lot of value as a developer to step back and look at a project from a design point of view. And I think in the future, I'm going to approach more projects this way. Thanks to the Lowdermilks and UI Stencils for changing the way I think about the process.
Labels:
Design,
Development,
Planning,
Podcasts,
Programming,
UI,
UX
Subscribe to:
Posts (Atom)