Saturday, September 27, 2014

Microsoft.

Hello again friends. I know I haven't written in a long time. School and HackISU has been keeping me sufficiently busy. This weekend I should be studying for the three tests I have on Monday, but I'm too damn excited to at this very moment. (Mom, Dad, don't worry I've been studying!)

So let's talk about jobs. In specific a Software Engineering Internship at Microsoft. At this moment in time I've had my on campus interview with a recruiter and will hear back from him within 1-2 weeks. If they like me I'll be put on a plane to Redmond Washington and I'll be doing second round interviews. Considering I'm literally shaking with excitement while writing this, I'll do my best to flesh out my experience for anyone looking to get a job with MSFT or interested in this experience.

(Tom grabs another Dr.Pepper (tm))

Anyway, (I love that segue) did I mention that I'm extremely excited? Because I am. If not for the fact that it's Microsoft, its that I could be working on some HUGE challenges, and I like that. I want to be challenged and dropped into an unknown code base and to figure my way around things. But aside from that, here's the story so far. I first met the campus recruiter Jeff at a Microsoft resume seminar, along with Jeff, I also met Martin a developer doing .net compiler work. HackISU was that weekend, which I was a lead organizer for, and Jeff and Martin were manning the booth for most of the event. First of all, major props to them for staying as long as they did, most booths packed up around 8-9 but they stuck it out for a while longer. I hung out with them a bit and showed them around to various hackers as they were spread out across a few buildings. Overall they were pretty cool people.

Fast forward to the career fair. I'm at the Microsoft booth. I'm talking to a recruiter I haven't met before and I'm talking about my experiences both professional and personal. He interrupts me to give me an interview. I guess he liked me! So Jeff appears and I get to write down my name and info for an interview the next day. I counted 6 1-hour slots, and for 3 interviewers, that's 18 interviewers. I was 1 out of 18 people out of the countless people that talked to Microsoft that day to get an interview on campus. As I found out through some of my other friends, they received and email to interview in a few weeks. Did this mean that I was special? or did I just get there first? Well to avoid stroking my ego too much I'm going to assume I just got there soon enough to get a next day interview. The rest of the day goes well and I get two more interviews with companies Cleversafe and Thinix (each of which I'll make a blog post on in the future).

You can only imagine how much sleep I got that night, knowing that tomorrow I had a chance at getting an internship at Microsoft. I brushed up on some programming questions from "Cracking the Coding Interview" even though I had only learned most of the topics on my own, and would be learning them in CS228 later this fall. Whoops.

After fitfully falling asleep, I was woke up, went through my day, had my first interview with CleverSafe. I felt that I did relatively well. They were pretty down to Earth people. Then after two more classes it was 3pm. My time to interview with Microsoft. Would I suddenly forget all programming knowledge? Would I pass-out during the interview? I felt weak at the knees. I know that the interviewer is a person too, which made me feel better. I was wearing a button down shirt with the sleeves rolled up, a black tie and slacks. Not quite as formal, but hey I wanted to be dressed nicely but comfortably as well! What's the sense in wearing a suit and getting over heated?

The clock struck 3pm and my interviewer emerged from the interviewing hall and called my name. This is it. I was ready. I sat down and he talked about how the interview was structured, his name, etc. He asked me about one of my technical projects, I spoke about my Hackulus Rift project. Which I did with my good friend Mike Davies, last semester for HackISU. He looked interested (I guess they all have to???)

Next up was the technical question. I was tasked to convert a string to an integer. I asked if Python was okay to write in, and he said okay. I'm not going to halfass a language I don't know. I jokingly mentioned that I could just write int(input_string) but that because this is an interview, that it would be cheap of me. (HAHAHA did I just crack a joke during an interview, and a bad one at that? yes) I asked what kinds of input I could expect. He said just a number in a string like "137". So I found an algorithm using 10**x to assemble an integer from a string. I started adding negative cases, and he stopped me. I then tested possible cases to make sure my algorithm worked. He checked my work, and took the paper.

He gave me another....

What???? I'm not supposed to have TWO. Every other interview on Glassdoor only mentioned ONE question. I looked at my watch and saw that I had completed the first question relatively quickly. Maybe he was just giving me another one to fill time? I don't even know. I hope this is a good sign. So he thought of another question to give me and came up with converting an integer to a string. A doable operation but with a different algorithm. I ended up finishing that one as well.

He took the paper and then he asked me why I wanted to work for Microsoft. I told him that I was passionate about coding, and that Microsoft has the challenges I'm looking for. Among other things he asked me another question about the hardest technical challenge I've encountered. This was for sure starting work at Workiva and not knowing what the hell I was looking at. It was stressful but I did my best and figured out how all their code worked in conjunction.

Cool. So I'm thinking at 1000 miles a minute now, like did I do well? did I miss something? am I being too dorky???

He finished up by asking if I had any questions. I asked about his day to day job, and the Seattle area. Then I asked a hard-hitting question. "So, how does Microsoft manage technical debt?" He seemed surprised that I would ask about tech debt. (Maybe? It's all a blur now) We ended up having a good conversation about it and how it's important to manage, etc. He looked at his watch, and we had taken up most of the hour with the interview, which was only supposed to be 30 minutes long, and I was his last interviewee.... I felt bad for it going over. But as I left I asked him if I was his last interview. He said yes, I thanked him for his time, and told him to go out and celebrate or enjoy himself. (Lame I know :p, I wanted to be nice!). Then I walked out and did a mini fist pump.

Did I nail this interview? NO IDEA. Will I get a expenses paid trip to Seattle? NO IDEA, I HOPE SO. I'm cautiously optimistic as to the outcome. After talking with my friend Mike Davies who also had an interview that day. We both concluded that we had done pretty well. Nevertheless, I was (and still am) an excited mess. I literally cannot wait to hear back and know if I've been accepted to the next round interviews.

So that's my story. I'll try my best to post updates and if I get to the second round I'll be sure to post pictures as well. I cannot reiterate enough how genuinely excited I am. Now back to homework!

Thanks for reading,

-Thomas

Monday, August 4, 2014

My Life as a Programmer

So yeah this post is going to be another lengthy one (we'll see ( ͡° ͜ʖ ͡°) ). Oh yeah and if at any point this seems like rambling, it's because it is.

My Journey into the Underground Club of Being Nerdy
It's exactly how it sounds. How the hell did I get to this point? I'm going into my sophomore year of college basically majoring in being a computer nerd. Most people have this whole coming of age where they realized that they didn't actually like business school and became a doctor or something. I've always had an affinity towards computers but I was unsure how that turned into a lifestyle. So it only seemed natural that when I figured that I could go to college and learn more about computers I was going to do just that. 

Disregard what I said about it being either "underground" or a "club" anyone can be nerdy about anything. I just find it weird how I'm drawn to computers. Why is anyone drawn to anything? All I can chalk it up to is a need to have everything organized and printing naughty words in the console when something breaks. 

The whole notion of technology gets pointless. Let's take facebook for example. It's purpose is to connect you with friends and family sell you advertising. It's built on technology built solely for the internet, which was made just so these computers could talk to another. Those computers were built because a guy named Alan Turing needed something to break the German's Enigma code. Let's face it breaking a code with pen in paper is fun, but Alan was sick of doing it. Point being technology is self-serving, quite literally, it means that if I want to make use a career out of technology, I'm making money from self-serving myself, like some double-dipping greedy bastard. I think the reason is more because I'm drawn to the fundamental nature of programming

 The Life of a Computer Programmer : A Memoir

I don't know exactly how or when it started. My oldest computer memory was playing Math Blaster. This was when I was 6 or 7. Around 8 I had found my dad's old Toshiba satilite laptop from the early 2000's and I loaded XP on it. That thing had one USB 1.0 Port and a 20 gb HDD. I basically used it to make paintings and photoshops in GIMP. Fast forward to  middle school and I was in Lego Robotics doing basic programming. I thought "Cool I can make LEGOs react to sensors!". I started learning C++ and LabView starting with my experience with FIRST Robotics. 

During high school, I dabbled with Blender, making basic plugins with Python, and also programming a National Instruments CRio on a complex robotics system. Yeah, I guess that's the first time I really opened my eyes to the world of programming and cool computer stuff. SIDE NOTE: I don't really want to think about how many hours I've sat in front of a screen since then *cringe* 

Since then, I've gotten into all sorts of trouble. I rolled my own server using debian and a VPS. Done countless things with Python, C#, and CUDA C. I even built some complex digital logic in Minecraft. I was a tech alcoholic that didn't get hangovers. I did my school work in high school and got into Iowa State University. Leveraging my background in programming, I've done a good job with my classes there. This prior and out-of-class experience ultimately landed me my internships and gotten me even more experience. Was there more to this programming thing then I thought?

Strangeness
 It's always weird to think about how I type things into a computer for a summer job. Admittedly it's a bit more complex than that but you get the gist. As a coder or programmer you might think you're hot shit because you programmed a killer app for IOS, but don't ever forget that you're thinking you're cool because you typed something on a keyboard and made something blink. 

That brings me to my main point, yeah you're probably thinking "Wow Tom actually has a point within this pile of opinion?", that main point is that no matter how small or simple a program is, it's no less powerful than some million line space shuttle project. Taking a step back and realizing how cool it is that you've done something with just text is an important process in becoming a mature programmer. You have to realize the impact of what you just created.

This fall I'm going to be taking another step in my development as a programmer. I'm going to be the first Treasurer of a club called CyHack. Aside from managing money, etc. I'm going to be actively planning events and teaching other students with my fellow club organizers. Coming full circle, I might get the opportunity to go to a middle or high school and talk about my major and why I love computers and you shouldn't be afraid of those feelings. Just imagine, if I can inspire just one kid, then they can inspire others around them. Spreading the word about not just Computer Engineering but everything STEM and more. Opening  the world up and sharing my experiences about how I took what I loved and made it into a career, and a fun one at that. 

This is the strangeness. This is the weird feeling. I'm reaching back into my past an inspiring myself again in some ways. I want to teach the world to sing. Because the world is changing faster than ever and we need more smart people that love what they do. Something more powerful than code or a good friendship. Legacy. 

Leh-GAh-SEE
This word was most popularized by my high school principal Mr. Brady. He loved to use this word. He would talk about how we as high school students should leave a positive legacy at the high school. And by positive he meant don't get sloshed and text someone a picture of your nether regions, or be a leader or something. Going back to programming, while it's important to leave good comments and make a logical OOD system, it's also important to mentor and give back to the people who may one day be programming your wireless catheter. 

We seem to measure our lives with how much money we make or how hot our girlfriend or boyfriend is. Heck some people are extra mushy and measure it with good friends. I want to measure my life by the contribution I've made to society. Not just future programmers. Just a long as I can still make great code and build overly expensive computers. 

That's about that. If you made it this far, thank you. If you did that and liked it why not share it with your constituents?






  

Friday, August 1, 2014

Code is beautiful.

Code. Such a simple word, yet extremely powerful. In this day and age it's everywhere, it powers our cars, phones, computers, power grid, etc. It's the next technological step for mankind; we created technology; code allows us to control that technology. 

The Inklings of an Idea

At the most basic level, code is just text that is either compiled or interpreted to do a certain task, or move some bits around, or blink an LED. Right now, I'm typing into my Firefox Nightly window which sits upon a framework of code, using javascript on Blogger.com to eventually post this text / html to a server and have it hosted for all to see. It's so complex yet it has to work seamlessly. Sure, I could use VIM and write all my blog posts in pure html via SSH, but I choose this method, why? Because it is seamless. Two separate methods of communication with the world, all built on code, same functionality. 

Looking at programming and coding at a functional level is all well and good. For instance if you're just learning a programming language you'll need to get the mechanics of that language down, learn how to build it and run it, debug, etc. However, once past the layer of syntatic symbols, there's something more beautiful... But I'll get to that later.

A bit of background before I dive into this topic any further. I'm going to be a sophomore student studying Computer Engineering, I've programmed for a number of years, and I've had two internships programming in various languages (If that didn't sound like an elevator speech then I don't know what would). I've also been exposed to professional programming schedules and the responsibilities that go long with that. Through my personal and professional experiences with code, I've come to form an idea about code that I can't quite fully grasp as of this post but it's a start.

Imagine you're a programmer at a medium sized company developing code for some platform, now imagine 50 years down the road, how does the code you committed yesterday work and how compatible is it with this imagined future code? Not very well right? It's impossible to know that far in advance what features or frameworks you're going to have to interface with. The thing about your code in 50 years is that (if it's still around in some form or another) it will have evolved and changed, to make use of new features and technologies. This is a glimpse into why code is beautiful, it's metaphysical, it's amorphous, it's an exact reflection of the time the team of programmers put into it. 

 

Code Like an Ocean

Now that I've fleshed out that the "code" I'm talking about is more abstract than concrete characters, I can pull back the curtain a bit more on my thought process. I'll admit it was very hard to focus these thoughts into something as coherent as this blog post, I'll try my best to explain my thoughts. The one path that led me down the rabbit hole was Object Oriented Programming, or designing pieces of software that couple with one another to mimic complex systems. As opposed to functional programming which is linear and is very difficult to scale, OOD is quite literally what you make it, a reflection of sorts of the inner psyche of the programmer writing it. 

Take for instance a program that creates a Car object, makes some Wheel objects and puts them all together, pretty simple right? It reflects a relationship between objects that make sense in our physical world. But what about the instances in which we need to create a more abstract system? Where do these ideas stem from and how is one considered 'better' than the other? In this way code is meta, there's no inherent structure to conform to, only the imagination of the coder's mind, a canvas for the imagination and a world still to be explored. 

Reaching back to the "What will this code look like in 50 years" thought experiment, how will people of the future perceive programming? Will it all be by though without a mouse or keyboard? I believe that our notion of programming today will be much different in the future, perhaps it will all be done by thought, programmers will sit meditating, willing complex systems into being from the singularity of their collective minds. No barriers, no boundaries, no code rebases. 

But "Wait!" you might say "Humans need rules and rigidity!", indeed you are correct, the internet was not build upon the ethereal thoughts of our internet fore-bearers, but was instead engineered and painstakingly designed to allow the explosion of a previously under utilized technology. And here we find ourselves, the humble programmer, amid the Ocean of Code, drifting endlessly across the rigid and rough waters, constantly paddling towards the calmer seas of lucid programming. 

  

All is not without consequence

You might think it's simple to brute force our way to greener pastures, just program like hell and you'll reach nirvana. But it's never that simple. Bringing the conversation back into the relevant world, there is a barrier, who's name is Technical Debt. Wandering back to my high school days I would write programs to fetch and scrape websites using Java. I was naive as to OOD in those days, but I beat my head against the wall until I could scrape RSS feeds for popular websites blocked by my school's IT department. It was crude but hey, I wanted that freedom. No fancy frameworks, no beautiful idiomatic code, no revision control. 

Looking back, I realize the sheer amount of tech debt that I was ranking up. Had that continued into a bigger project, I would have been swamped, and work would have ceased. Project management tools can only do so much to make your code manageable. All programmers walk the line between the time it takes to plan a project and the time it takes to execute said plan. As outlined by this relevant xkcd comic 

http://xkcd.com/1319/

Pulling in some experience from my two previous jobs at Webfilings (now known as Workiva) and Garmin, I've gotten the chance to work on fairly large projects and deal with tech debt first hand. While Workiva was very organized and all code, as far as I could tell, was well written and meaningful, they also ran into issues using two different languages for both the front and back ends, a constant source of upkeep was required to maintain both. Despite this tech dept it was managed and I consider Workiva to be a pretty efficient coding machine. 

On the flip side, the code I had been working on at Garmin was significantly older. The framework documentation was nonexistent and people just went to 'the guy who knows about that module' for any help, I was surprised how this system could function when built upon very old code. While Garmin had a larger technical debt working in a non OOD language with complex but non-decoupled frameworks, they still managed to get all the functionality they wanted for their line of products. They did this by correctly managing software development teams excellently and efficiently.

To compare these internships to games, Workiva is to Civilization V as Garmin is to Dwarf Fortress. Both are games I enjoy very much but DF has a much steeper learning curve. Tying this back to code as a metaphysical instance, your blob of code wont standup unless you trim the fat and focus on making your project or framework modular and easy to navigate. 


Walking the line

I think it's safe to admit that the world will always have issues, always some form of misgivings somewhere. Code is that way, there will never be completely lucid and unified API, period. There might be some pretty darn close APIs out there but under the thin veil of neatly organized function calls and objects, there lurks a labyrinth of programming pitfalls. Now, this post isn't going to actually teach you the exact way to fix your specific problem, but more as a spiritual guide to programming. Feelings your way through the tougher problems presented, that can't be solved with a simple switch case or loop comprehension. 

Our secondary jobs as programmers is to not only write the code we think up but to architect this code in a meaningful way. Even if you're just beginning to program, it's important to start thinking about how your code will function with other pieces that you've written. I'll admit, it's hard to predict whether your one-off script will turn into a framework. It's even harder to begin putting together lines of code, not knowing whether your code is destined to be a glorified POS or a beautiful API. 

It's only going to get harder as the way programs are written will be built on more complex frameworks. There's nothing to fear for you stand on the shoulders of giants. Those who coded before you, meticulously thought out and planned their systems. And in time it becomes harder to keep track of your own project, therefore use commenting and copious amounts of documentation to clear your thoughts. 

Look into yourself dear programmer, find your inner strength and think before you type. Work out all the possible routes and expansions you want to add to your project before you open a new Visual Studio project. Leave room for seconds, and thirds. Know the extent of your project even better than you know yourself, and you too can walk the line. 

 

from Mind import Sanity

This all might seem a bit crazy to you, it's still pretty damn crazy to me. Like I've stumbled upon some secret to the universe. Above all the metaphors and abstract ideas, I've been enlightened as to the true inner workings of programming and organization. I hope that my brief journey with you has been equally eye opening. Thinking abstractly about code and then being able to solidify it into complex systems that are powerful AND work well is an excellent skill to have. As a programmer that skill will basically start you on a path to a great career.  

Now, as a bit of a disclaimer. I don't mean to sound all high and mighty, I'm not suggesting that programming is the only place where planning is important, of course planning is crucial in nearly every aspect of life. I'm simply providing my thoughts on how to be a better programmer. Fortunately these skills of abstraction translate well to the real world, critical thinking is ever more important. 

Programmer or not, I hope you criticize my opinions above, the world is all about improving on the ideas of others and looking for self betterment. Do not shy away from complexity, instead embrace it. Think of your code on a more grand scale. See the big picture. Grab hold of your programming skills and use them as your super power, control and create the technology around you. Make the world a better place. And above all remember that Code is Beautiful.

Friday, July 11, 2014

The future is 3d

The future is now!!!!!

But really, It's totally now. I received my 3d printer yesterday and BOY am I exited! I assembled it last night and wired it all up and printed my first cube. Below is a picture of the tolerances on my first print. They were only .15 mm off!! not bad for a first print!!!

Look at that nice Caliper
 For the build photos click on my dropbox album -> https://www.dropbox.com/sh/si316hk017orxqd/AAB4evClgMYpCjh9Ie_2rovta

Bonus pic of me in a Dinosaur hat for you guys. 

So anyways that's my Printrbot Metal simple, I look forward to printing more and more cool things! Stay tuned (uh to my blog I guess, I doubt you're viewing this on a TV) for more cool stuff!

-Tom

Thursday, July 10, 2014

PrintrBot Simple Metal - Pre-Review?

Hello to the many people that read my blog. (which is like 7 people). My PrintrBot Metal hasn't arrived yet :( That's the bad news, now the good news is that I have my room setup to accommodate a 3d printer now! For those of you who haven't seen the original Printrbot, below is a picture of the laser cut one. Pretty cool right?
Look at this cheeky fellow
Now fast forward a year or two to 2014 *time warp noises*. I'm in the market for a 3d printer and I don't want to spend a lot of money on my system but I still want a good product. Introducing the Metal Simple from Printrbot. It's basically the same design, with the X-axis bed and the ZY-axis arm, but it's ALL made of METAL. Which adds like +10 to it's sex appeal... if a printer can have such a thing. Here's a link and a picture -> http://printrbot.com/shop/simple-black-kit/
Industrial Beauty
Now, if you're wondering, I did buy the kit option, because first, I can probably assemble it without breaking it and two, I want to do it. Meh I have the internet if all else fails, and Printrbot does a good job with their instructions.

Shipping Woes

Now I haven't actually received my Simple Metal yet. According to the site there's a 1-2 day lead time which is totally understandable, and a ton better than makerbot's. My lead time was a WEEK, now take into account that one of the days was the 4th of July, that's still pretty unreasonable. 
I contacted support and they told me that they didn't have enough metal parts to put together a full kit and apologized with a 10% off coupon. That was good enough for me, I can understand that there are going to be production issues with a smaller company. Now I'm waiting on USPS to deliver that package  before Friday!


Getting ready for my bundle of Joy

Like any good parent, making sure you have a place for your baby before you bring it home is important. So i decided to accommodate my printer before hand so it felt at home when I got it. Now I'm going to use a bulleted list, bear with me.

Things to do before 3d printer gets delivered:
  • Setup laptop with Octoprint for network printing [x]
  • Cry deeply over the longer wait time for my printer [x]
  • Buy tools and materials for the baby [x]
  • Clear off some precious desk space [ ] 
  • Hire Private Investigator to track the package discreetly [ ] 
As you can see, that list is pretty comprehensive and is almost done. Check out my octoprint screenshot below

  
In closing, I'm exited, maybe a little too excited but excited non the less. I'll post pics (or video) of the assembly / unboxing then post more about my prints! and as always thanks for reading!

Thursday, July 3, 2014

The future is now!

Hello comrades. It is your glorious leader, Tom. So good news, I bought a 3d printer from printrbot.com. This one specifically http://printrbot.com/shop/simple-black-kit/. Man am I stoked. I ordered it Monday but there's a lead time of 1-2 days and the thing still hasn't been processed :(. I wanted it by the 4th to play with this weekend, but I guess I'll have to suck it up. I'll be writing a review about the thing once it gets here, maybe to an unboxing (because that's original). I'll finish this post later

Thursday, June 26, 2014

IndieGoGo Campaign Officially Launched!

https://www.indiegogo.com/projects/mesosphere-pioneer-1/x/1698207

Check it out above! Please help support my project to send a weather balloon payload to space!

I will be making more updates as I organize more things. If you'd like to see me and talk about the project, I will be at the KC Maker Faire this weekend.

Happy crowd funding!