Clean Code

I’m almost finished reading “Clean Code” by Robert Martin. I was expecting it to revolutionize my understanding of programming, but in the end it really didn’t. As one reviewer on Amazon noted, it’s better off being called “Clean Java”. If you make it past the arrogance, you may decide to skip the parts on JUnit, EJB, and refactoring (which is really just one giant Java program with textual comments).

l learned a lot from the sections on functions, classes, and comments. The best thing you can get from the book, however, is a better understanding that there are competing standards, and your are better off knowing what they are and why they are there.

Just writing code is not enough. There is so much to it. Not considering the customer side of things, you should probably know design patterns, data structures and algorithms, application architecture, general coding best-practices, multi-threading and concurrency, application security, test-driven development and automated unit tests, and IDE features and frameworks. This is on top of knowing several languages thoroughly, writing code in your free time, contributing to open-source projects, and have good social and customer service skills.

It’s no wonder that nobody really knows how to codify programmers. And Computer Science programs still make you spend a lot of time learning Calculus III. As a developer who loves to learn, I’m not sure how long it will take me to learn all of these. It’s mind blowing that I came across so many companies recently who wanted to hire somebody who had skills in all or most of these areas with less than five years of experience! Ok, so two people said the concurrency could slide, but still.

This is also perhaps the only industry that expects you to have “passion” and wants to see you coding outside of work. I understand how that can be a valuable indicator of your performance on the job-we don’t want Jimmy typing on a screen all day if he hates doing it at home-but the fact that it has become an expectation is disturbing.

As much as I love learning, I can’t fit all of that in right now. Learning takes time, even when you can pick things up quickly. That’s something I get to prove on the job here soon. I do like the idea of tradecraft, that there is a good way to write code and some best practices that can help you really stand out as a professional. But I can’t say I trust that from any one developer, no matter how famous of a company he’s worked for, and a lot of those companies are churning out bloated pigs branded as software.

Speaking of, I had a Windows process max out a brand new Intel i7 processor the other day, and I cannot imagine what sort of trash caused that to happen under the coverts.

Push on, keep fighting! I have way too many books, but it is worth it!

The Year of Ambition

The past three months have really done a number on me. I didn’t mention it in my last post, but I had planned to make it half-way through a book on Oracle Spatial before I started my new job this week, and only covered a fraction of my goal. Last week I felt the exhaustion of all this study weigh-in, and crashed into a “theory-only” book routine. Everyone needs rest. Cheers.

Finding the time to read in the evenings has been difficult. I have more programming books than I’ve ever had before, and probably more projects than I can handle. Tonight I enjoyed a pizza and some Best Damn and have been picking at Clean Code as I try to recover from a very busy week. There is no rest in reading when you get slapped in the face by concurrent programming, a realm I had to confess to knowing nothing about during several interviews. The list of things I don’t know continues to grow, and it’s depressing after having knocked out so many other subjects. But I’m not giving up.

The message is clear: there’s no getting comfortable this time around. Last time, what I was doing was so uninteresting that I let it affect my enthusiasm for all things code. This work is a lot more interesting, so there are no excuses! At work I’m learning how our product interacts with CAD, and I’m hoping very soon to start writing Python code for it. I got a chance to look at some existing programs today. What is so awesome is that this feels like a challenge that is above me just enough that I know I can hit it if I work hard, but I will have work. They’re counting on me to learn this system quickly and start producing, and I don’t want to let them down.

I also bought five books during the Apress sale two weeks ago, so uh, there’s plenty more to read. And I decided I wanted to cover Design Patterns this month. I’m probably out of my mind.

Most sobering is that I’m going to be building an intranet inventory system for an ethical manufacturing company in Nepal over the next six months. I’ve never built a full-stack application before, so while it gives me a chance to do just that, it also means that looking at screenshots of their existing system caused me to nearly crap myself. To be fair, there’s far more shiny-looking WYSIWYG functionality for desktop applications than there is for web applications, but I hadn’t even thought about print options and icons. But I have to stay frosty. I’m putting some serious thought into the database, which is the most important piece, and if I know what’s good for me, I’ll focus on that first before worrying about what’s next. Let’s just say I get the chance to learn. Or grow. Like my last post. Whatever.

You could call it the fire. Or the funk. There’s that piece of me that won’t be satisfied until I’ve got this down. I can do this. No slacking, no giving up. Do well at work, earn my place in the industry. Do well on this inventory system, help companies hire and empower the marginalized. These are good motivations.

Growth

I start my new job on Monday. According to the employee policy handbook, I’m not allowed to really mention or link to my new employer, but I’m excited. I’ve been reading up on Oracle Spatial and investing in some more in-depth Python knowledge.

Yesterday I paid a visit to my former employer to visit all my friends and catch up on happenings over the last three months. It was bittersweet, but it sounded like not much has happened since I left. Three months isn’t all that long, I suppose.

I asked myself where I would be if I had chosen to remain there. The Security+ certification would still be on my two year goals list, I wouldn’t know 90% of what I have learned about C#, I wouldn’t know what WPF is, I wouldn’t know any HTTP or how to even begin testing website security. I would not know what I really need to learn for the industry, I would not have found out what I really want to do. I would probably not have finished off some of my personal projects. This isn’t meant as a criticism of my former employer, but I think it is to say that leaving was the right choice for me. I feel engaged in the industry, and I’ve never been so excited to start a job. I get to program Python and PL/SQL on top of Oracle Spatial, daily. I get to dig through masses of tables and get them to do what I need. That’s awesome!

It’s easy to get comfortable when we aren’t growing. To sit back, chill. That’s what happened to me before: I didn’t find the work engaging or challenging, and I lost all motivation and drive. You really have to know yourself; a company with the greatest community is a bad fit if the work isn’t engaging. But now, I love knowing that what I study will have a direct impact on my job. I even scooped up a book on Oracle performance tuning because my new boss mentioned in our interview that they had a query that was taking too long to run. I want to fix that!

Friendships are very important to me, but you still have to have goals in life or you aren’t likely to achieve anything. Leaving friends can be hard, but I have too many friends who come alive with passion when they talk about things they don’t do at work. I’m always wondering, “Why don’t you go do those things for work?” It’s risky. Believe me, I know. Three¬† months. But this was worth it. I’m very blessed this worked out.

Also, I will be doing volunteer coding for a small ethical manufacturing company in Nepal. I’ve followed them for years, and now I get to talk with them, and have even been doing requirements gathering and some basic project management. I’m excited to build this program out for them, I think it will be a lot of fun and will really help them out. This has gotten me reading a book called “Database Design For Mere Mortals”, which even has some huge sections dedicated to requirements gathering for databases, so it’s perfect for what I will be doing.