I didn't really plan on looking for jobs until this August, after I finish Dev Bootcamp. I thought it would be pointless to spend a lot of time researching and talking to different companies NOW, when it's going to be another three months before I could even start working for any of them.
But then I realized that I ought to have a clear idea of what companies I am actually interested in, before I start applying.
So I started job shadowing a little bit. I started talking to people, telling them that I just want to learn more about the type of work they do and their company culture. I started thinking really hard about where I want to live, where I am willing to live, and where I have no interest in living. I ruled out a few places because of location, and I ruled out a couple more because I was seriously uninspired by their body of work, or what their employees had to say about the company culture.
I also found a couple places that I am really interested in. Each one has its own draws, and each one has a few drawbacks. But getting a good idea of the kind of options I'm looking at for this August is turning out to be a really fun exercise. And "really fun" has NEVER been a term that I have used in the same sentence as "job search".
I'm starting to dare to hope that I could have a job that I will love lined up within a week or two of finishing Dev Bootcamp, if I keep doing my homework like this and keep communicating with the companies that I would love to work for.
When I quit my Weekly Website project, this is the project I shifted all my energy to. I started--naively--building a new website for 2Chez restaurant (my current employer), thinking I'd be done in a week or two.
Lolz.
Here I am, about 2 months later, finally done. And I didn't work alone. My friend Dave, who has a lot more design chops than I do (mainly just that he's a professional product designer for an awesome tech company, and I am not a designer at all), jumped in and helped me along the way.
This is it. Take a look.
What I started out doing was a minor aesthetic upgrade to the very old, very non-responsive, very 1999-looking incumbent website. Oh, and sure, I was going to build in an admin page that would allow the 2Chez staff to easily update the menu when necessary.
What Dave and I ended up building is a fully responsive, mobile-first, single-page web app that looks fantastic, showcases the food and ambiance of the restaurant, allows Todd (the owner of 2Chez) to manage the menu easily, and works across every device and browser.
(That last part was a real pain. Took me forever to get the thing to work right on stupid Android default browsers.)
I learned about workflow with git, and how to use github to effectively work with someone else on a project. I learned not to commit my changes directly to master, especially after being asked not to. I learned that just because you CAN add a feature doesn't mean you SHOULD. I finally got comfortable with making AJAX calls in a Sinatra app. I learned that typing an entire restaurant's menu into your app is not fun, but that making up fake menu items for testing is fun. I got a little more comfortable with PostgresQL, and a lot more comfortable with Javascript. I'm proud of my code, and happy with the final product (although I have a few ideas for improving it, still).
Now, I've officially started my Dev BootCamp prep work, and I'm delighted to find it a little boring so far (means I'm at least a step ahead of the game...for now). In my free time, wherever that is, I'm going to be starting a new website for a local hair salon. If I can have two legitimately good projects on my resume before I even start Dev BootCamp, I'll be pretty happy. That's a lot more than I thought I'd have.
Kind of interesting (to me, at least) to think that last year at this time, I had never written a line of code and was (kind of desperately) applying for jobs that I wasn't all that interested in, just because I thought they'd be at least tolerable, and I needed to do something other than wait tables.
I've learned over the course of my life to not hold my plans too tightly. I make them, of course, but I rarely expect them to actually survive very long. I've found that it's better to adapt to new opportunities and roll with them, rather than stick to the plan just for the sake of sticking to the plan.
So, I'm shutting down the Weekly Website Project. Yeah, it's 12 weeks earlier than I planned. It's been great. I've learned a ton. But I've outgrown it, and better opportunities are sitting out there, just waiting to be seized. Here's what I mean.
I'm tired of starting a brand new project from scratch every week, get invested in it and build some momentum, only to have to quickly wrap it up before I'm really done with it because I have a hard deadline on Saturday.
I'd rather spend more time on a project, really developing it and making something genuinely valuable.
I've been having a great time building a new site for 2Chez, a local restaurant, and that project is drawing to an end. I've learned a lot about design, UI/UX, and how to work with someone else and use Github collaboratively. I actually have a backlog of real, live client work (websites for an insurance agency, a hair salon, and possibly a doctor's office), and I realized that it's kind of dumb to put that kind of work off just so I can build mostly meaningless websites that I can finish in a week's time.
I'll still be coding just as much, if not more, than before. I'm just getting rid of my weekly deadline. Hope you keep following along with me!
What remains is mostly styling, adding photos (from a photo shoot that will take place next Thursday), and building in some navigation and a few more admin features.
When I started working on a new website for 2Chez (the fine establishment at which I work), my ideas were very small. They've grown, and the product that I'll deploy in (hopefully) another week is going to be so much better than I could have imagined three weeks ago. I'm pumped.
You can visit the site in it's current (unfinished) state here. I threw a signup and login button up at the top of the site, so feel free to sign in and mess around with the menu. Better yet, do all that on your phone, because it works really well on a mobile screen.
I'm not even halfway through my Weekly Website project, and I'm really proud of how my code is becoming clearer, cleaner, and more powerful with each new project. I'm to the point with my skills that I feel confident enough in what I can do that I could start building websites for people and businesses and charge them for it.
(I'm not going to start charging yet, though...I've decided that I'll work for free until after Dev Bootcamp--so if you want a shiny new website, talk to me sooner rather than later!)
For the past three weeks now, I've been working with a friend on a new website for a local restaurant. It's my first actual client work. It's been challenging, educational, fun...and time-consuming.
Not wanting to stray from my Weekly Website project, not wanting slow down on the restaurant site, and not wanting to quit my job for extra time and put my family on the street, I realized that something had to give. I needed a project that would be valuable to me but wouldn't take a ton of time.
That's why I decided to work through Michael Hartl's Rails Tutorial again.
I worked through this book once before, last fall. It was my first taste of development, and I didn't really understand much of what was going on. I think the only concept I fully understood after the first time through was using .erb templates with a layout.
Working through the tutorial a second time, I learned a lot more:
- After working with mostly Sinatra, Rails seems like cheating. So much stuff happens automagically. I'm wary of getting sucked into Rails before I really understand what it's doing, first.
- I finally became comfortable with using and setting up a postgrsql database.
- TDD is also making a lot more sense. I need to start doing that.
That's it for now. I'll have another post up for this week shortly.
When I started this project, I committed to blogging consistently posting all of my code on Github in the hope that eventually somebody out there might take notice of what I'm doing and give me some constructive feedback on my websites. Learning from tutorials and reading the internet is fine, but doesn't hold a candle to actually learning from a person who knows what they're doing.
I looked back at my first weekly websites (especially week 1 and week 3), and I laugh at how proud I was of them at the time, and how unproud of them I am now. Take a look, feel free to chuckle (if you really want to laugh, look at them on your phone!). It's like the pictures you used to color for Grandma when you were 3; you thought they were great, she put them on her fridge, but really they just looked like someone dropped a box of crayons on a piece of paper and then stepped on them.
Nine weeks ago, I was 3 years old in web-developer years. Now I am, what, maybe 10, so I decided that it's time for my home page to get a facelift. Here it is. So much better.
A few things I've learned this week:
- I don't know why it took me this long to start using Bootstrap. It's amazing.
- From here on out, I'm going to design mobile-first. Doesn't make sense not to.
- I didn't know about Google fonts. Dave showed me those. They are also amazing, especially to someone who's used to working with about 3 decent font options so far.
- Speaking of Google fonts, I learned that there are a whole slew of Christian fonts on there. I can't decide which is tackier, the names (Covered By His Grace, Waiting For Sunrise, etc.) or the fonts themselves (they all seem to be somewhat inspired by Comic Sans). I bet God doesn't even like them.
So I took last week's site-in-progress to Todd, the owner of 2Chez Restaurant. He loved it, and so it's full steam ahead on the 2Chez website.
Since he's now seen it, I put the 2Chez home page that I built last week up on my site. It's just a static home page, but check it out on your phone or tablet. It looks good on any screen! (This is the first time I've done this, so pardon my excitement).
However, there's been a new development in ye olde 2Chez website project. My friend Dave, who was the one to really get me interested in web development in the first place, offered his help with the project. He's got a lot more experience than I do, and especially a lot more design talent and knowledge.
So 2Chez's website is going to be released a little later than planned, but it's going to be outstanding. Stay tuned.
I don't know what I'm going to build this week. Maybe today will help me decide, though. This evening I'm hopping a train to Chicago to hear JB Pritzker talk about the tech startup scene in Chicago at 1871, which sounds like a pretty awesome place. Should be interesting.
Wednesday
My head is imploding. I got absolutely nothing done today on my website, but that's ok because Monday and Tuesday I also got nothing done.
So I'm being consistent.
Monday night was cool. It's exciting to hear about the growing tech community in Chicago, because that where I really, really hope to end up after Dev Bootcamp. 1871 seemed awesome, made even more so by its proximity to DBC. It seems like I'm getting into this field not a moment too soon, what with the rapid growth of the tech industry in the city. It blows my mind to think that 8 months ago, I would have heard a talk about startups and thought, "That's super-cool, but I could never actually be a part of that because I'm not a computer person."
Anyway, that little corner of Chicago (around Hubbard and Orleans) is quickly becoming my favorite, with Hashrocket, DBC, 1871, Trunk Club, and J.P. Graziano Grocery all within close walking distance.
Thursday
FINALLY decided what to build this week. Travel and the feeling of Thor's hammer beating my skull from the inside all day yesterday prevented me from really getting a start on this week's site until today.
I've wanted to do this for a while now. I'm taking on my first actual client work--building a website for a local restaurant (can't say which one, yet)! It's fun to make something that will actually be used, and will have an impact on a real business.
I'll be returning to Sinatra for this project, and using Bootstrap for the first time. I've toyed with Bootstrap before, but never really used it properly, and it seems really fantastic, so I decided I should learn my way around it.
Goals for this site are:
- Make an effective website that gives visitors all the information they need, in a way that attracts them to the restaurant.
- Use Bootstrap.
- Create an admin page that is easy to use and allows someone with no coding ability to update menu items and post announcements.
- Use mobile-first design.
Saturday
So, I've made a ton of progress, and I have a preliminary version of the site finished. Well, it only consists of a home page and a contact page, but it looks great and works on any size screen.
Unfortunately, I can't show you yet. You just have to take my word for it. Here's why:
I'm building this for a local restaurant that is sorely--no, desperately--in need of a new website. If you know me, you can probably guess what restaurant I'm talking about.
I work there.
But I have not sat down with the owner--my boss--and really talked about this yet. He's busy, and if I wait for him to tell me what he wants, it will never happen. So I'm building a site that I can take to him and say, "hey, for free, you can have this new, pretty, functional, modify-able, mobile-optimized site. It's ready to go, today. It's hip and it's coolio and all the young people will see it and want to come eat here."
Since, however, he hasn't seen it yet, I don't want to publicize the work-in-progress. So I'm sort of breaking my rule of releasing a new website every week, but I'm ok with it because I've built a lot, and it's a big project, and there are factors outside my control affecting its release date.
I'll put what I've done so far on github, so you can check it out there if A) you know what github is and B) you care.
This week I'm going to try something a little different. I'm going to write daily blog posts and then publish them all together at the end of the week. Hopefully it will lead to a better record of my progress, how I'm feeling about it, and what I'm learning as I go.
So here goes...
Monday
Last night I spent five hours driving 64 miles in a raging blizzard, the likes of which I have never driven in before. It was the worst, and it is the reason that I had absolutely no energy today.
So all I did today was decide what to build this week and...well, that's about it.
This week I'm taking last week's Node.js chat app and improving on it. My goal for the week is to turn it from an absolutely bare-bones chatroom into something that's actually cool, and usable. I'll be working with Express and Node, and I haven't decided yet if I'm going to tackle user authentication again this week. We'll see how the next two days go, first.
Friday
It's been a good week. I've learned that I'm not good at blogging a little bit everyday, but that's ok, I'll get better. I also learned that it's really, really fun to take my 2 year-old daughter sledding. I also learned that I'm too old to stay up until 2:41 am, which is incidentally exactly what time it is now.
Node has been good to me this week. Javascript is starting to seem less foreign (although I'm SO MUCH more comfortable with Ruby, still). Socket.io and Redis and Express have made this week a lot of fun. I've had more "Yes, this is going so well!" moments and not so many "My brain is broken" moments.
I have a less bad chat app than the one I built last week. It's not exciting, but I didn't want to shoot for exciting this time. I needed this week to feel my way around Node some more.
I need to do some serious work on my CSS skills, though. I borrowed heavily from bootstrap with this site, and I don't understand most of it...although it ended up looking alright. I'm getting ready to do some freelance work for a local restaurant and I want to be able to style it perfectly.
Saturday
...and I'm done.
I ran into the same problem deploying with Heroku today that I did a week ago. Namely, my chat messages would take up to 20s to post, which isn't great for conversation. Unless you're an Ent, I guess, but Ents are not my target market.
All it took was this line:
$ heroku labs: enable websockets
And my Not-So-Bad Chatroom was up and running. Of course it took me an hour of troubleshooting to get to that point, but what's a little wasted time on a snowy Saturday?
In sum, I really like Node now. A lot. And I love express. I was a little disappointed that I wasn't able to figure out how to display online users on a 'join' event, but at almost 3am this morning, I realized that I didn't care enough to keep fighting with it. That's the nice thing about limiting these projects to one week--I get to close the book on each one every Saturday, and sometimes that means abandoning a feature that I had been wrestling with for far too long.
On to next week. I may try to make something that's mobile-optimized. I haven't done that yet, and I need to in order to start on my first actual client work...exciting!
I have seen quite a few mentions of Node.js on the handful of Dev Bootcamp students' tumblr accounts that I follow, so I know I'll encounter it this summer. In the spirit of being as prepared as I possibly can be, I thought I should take a stab at Node this week.
I started off by reading a tutorial book (although book is a generous term...really more of a large pamphlet) to get a rough overview of Node. Then I worked through the Code School Node.js course.
Then I still did not understand Node.
I found another tutorial. Read two more articles. Still confused.
Ruby makes sense to me. I'm comfortable with it. I like Rails and Sinatra. But when it comes to Javascript, I'm a lot less comfortable. When it comes to asynchronous Node, I just could not get a handle on what exactly the code was doing.
All I wanted to do was create a simple app with Node that uses sockets.io to update my site in real time, but by Friday morning I was still getting nowhere, and starting to despair of having anything ready to publish by Saturday.
Then I got called in to work unexpectedly, and had to forfeit the rest of my day of coding. I picked up where I left off when I got home at 10:30, but by midnight on Friday I still couldn't figure out how to modify my page in real time.
At 1am, Saturday morning, I moved a block of code up a few lines, and boom went the dynamite. I tweeted my exhilaration and went to bed.
Later on Saturday morning, I finished off this very simple chat app. It is terrible, as far as chatrooms go. There are no usernames, no persisting messages, and a bland color scheme. There's obviously no user authentication, because there are no usernames. Oh, and there's no way to tell if anyone else is online when you visit the room.
But it works. It is an actual chatroom, albeit the very worst one you could hope to find. I'll come back to it and flesh it out a little more later.
So, all in all, it was a frustrating week followed by a great Saturday. I'm just glad I fought through that learning curve now, instead of having to deal with it for the first time at Dev Bootcamp.
As I get older, I realize that I am old. But I also realize I don’t know very much and all I have is the present moment. And I want to be around people that do things. I don’t want to be around people any more that judge, or talk, or talk about what people do. I want to be around people who dream, and support, and do things.
Last week I made a rudimentary Sinatra app. I followed a tutorial and then played around with the tutorial app, changed some things, added some features, and pushed it to heroku.
It was a start, but it left me wanting to tackle Sinatra again, this time building from scratch and incorporating a few new features, like data model relationships and user authentication.
So here it is: MovieList! It's an app for keeping track of movies that you want to watch. I suppose you could accomplish the same thing with a pencil and piece of paper, but let's be honest, it's way more fun to make lists online than on paper, right?
So this week I learned:
Getting Warden to play nice with Sinatra is apparently too hard for me. I spent all of Thursday fighting with it, to no avail.
Fortunately, I was able to build a simple user authentication system from scratch. I'm sure it's not super secure by any means, but it's functional, and security is not very important on this app (since it requires no personal information from users).
Sinatra is really nice to work with. I'm a big fan.
Datamapper is pretty great too.
The advice I received to find other websites that I like, then copy their design, was great advice. It's so much quicker than coming up with my own design for each and every site. As a tip of my hat to the platform I used all week, I styled MovieList after Sinatra.rb, which is a pretty fantastic-looking site in its own right.
This was a big week for me, because this week I built my first web app, not just some lousy website that doesn't have a database!
By the way, I like databases. I love mapping data, sorting it, displaying it in interesting ways, tracking information, statistics, and on and on.
Also, I really like college basketball, especially when my Illini are involved. So, this week, I decided to marry these two interests of mine. They had a baby, and it is named the Predictomatic 3000.
The Predictomatic 3000 is a very simple app that allows people to visit the site, make a prediction about where top basketball recruits will play in college, and then view all the votes. Predictions can then be easily sorted by user or by recruit.
That's all.
I used Sinatra, which is a DSL that I've been curious about ever since I read about it in other Dev Bootcamp students' blogs. Honestly, I was a little scared of it--which is why I decided I needed to tackle a Sinatra app of my own sooner rather than later.
So, this week I learned a lot--including, but not limited to:
I spent 7 hours figuring out how to make my Sinatra app deploy correctly. 7 frustrating hours. This is why I'm so looking forward to learning at Dev Bootcamp where I'll have people right there who can help me solve problems a lot faster, and I can spend more time building and less time wandering around the internet, blindly trying to figure out the answer to my problem.
I think I need to learn more about databases. Maybe take a class or something. I know that I have only scratched the surface of learning how to use them effectively.
I left a lot of ideas un-built, because of time constraints. I want to take another crack at building a Sinatra app, with cleaner code and more features (such as unique users and authentications). Maybe I'll do that next week. Or a different week. We'll see.
I really don't understand the params hash, but I'm starting to. A little bit.
I learned that you can't use Javascript to insert embedded Ruby, because the Ruby gets interpreted first. Inserting it with .innerHTML just prints the embedded Ruby code into your site, which looks dumb.
Using PostgreSQL is tricky. For me, at least at this point, it's like handling dynamite. It's very useful, but bump it wrong and it will blow off your head.
All in all, it was a long week, but I'm happy with the progress I made and excited to start a new project tomorrow.
This week I wanted to continue working on writing concise, clear HTML and CSS. I also wanted to work on embedding video content and using Javascript to make my site interactive. I thought I’d try to create a poll from scratch and use the results to manipulate elements on the page.
I was successful with the first two goals, not so much the others. I just ran out of time to figure out how to make a poll and save the information to a database and then pull it out to modify the site. So this week’s result is a fun little site for Illini basketball fans like myself, with buttons that play five of my favorite moments from the past two seasons. I like it, but I’m disappointed that I wasn’t able to make it more complex and interactive. However, even failure can be worthwhile. I learned a lot in my (ultimately unsuccessful) attempts at creating an interactive poll.
So this week I learned:
That some HTML elements have default style settings that you have to know about to counteract, otherwise it can be really frustrating when your unordered list just refuses to respond to your CSS the way you want it to.
PHP is confusing.
Staying up until 2am with a flu-ridden toddler is bad for the code that you write the next day.
Coming up with decent content for a new site every week is harder than building the site itself.
The last two weeks were full of holiday celebrations and extra long hours at the restaurant. I’m excited to have more available time to work on this project in the coming weeks. I want to work on a couple web apps this month. That’s where the real fun is!
A friend of mine started a company called Cladwell, and I made an off-hand joke to him that Malcolm Gladwell would probably like his business, simply because of rhyming.
Then another good friend of mine suggested that, for this project, I should find websites that I like and reconstruct them. "Kind of like a cover band," he said, "only with websites instead of songs."
So, I decided that this would be a great week to roll out Gladwell, my answer to Cladwell. I'm pretty happy with how closely I was able to mimic my friend's site, and this was the first time I've ever used Javascript outside of a tutorial.
CSS positioning is really starting to come easier to me. Still have a ways to go, but now it's starting to seem logical instead of wild and mysterious.
Javascript was very frustrating when I was learning it in a tutorial. It seemed way worse than Ruby, for example...not as intuitive, not nearly as powerful, and hard to read and write. But after working with JS this week in an actual website and seeing just how easy it is to integrate into my html file, I'm a fan. Now I understand why it's so common.
I was sad to discover that Gladwell does not translate well to mobile screens. Learning how to optimize my projects for mobile use is definitely on the agenda for the coming weeks.
I'm excited to start on something new tomorrow. I don't know what I'm going to do yet, but I have several hours to figure that out, so no sweat.
I'm excited about this project. This week I built the home page for the Weekly Website. It's simple, but I learned a lot putting it together.
I figured out hexadecimal colors. This is super basic, I know, but it's an important thing to understand, right? I didn't before, now I do.
I haven't done very much--at all--with HTML and CSS. Figuring out positioning has been the hardest, and I'm still not very good at it. I know enough to recognize that my HTML is pretty ugly, but it's going to be a while before I am happy with it. For now, what I have is functional, and I was on a deadline, so it will do.
I spent several hours this week working on this. It's amazing how much faster time flies when I'm working on an actual project rather than practicing on tutorials. This is a good sign for my job satisfaction when I'm doing this every day.
I've decided that writing code is like playing a musical instrument. It doesn't take too long to be able to make something beautiful with each one, but mastering either is elusive.
I love having to keep learning all the time in order to keep up with my imagination.