Breaking into Programming

"From time to time, I run into people who are interested in breaking into programming. Last night at the company holiday party a guy (we’ll call him Sam) walked up and introduced himself, asking for advice on how to move from his current role over to development. Sam’s attitude impressed me – guys with a genuine desire to learn go places quickly. And on many occasions I’ve hired someone very green simply because I could sense a genuine interest in the craft and a hunger for knowledge. I’ll take attitude over aptitude."
-- Cory House, emphasis added
Same opinion here. Genuine interest and hunger for knowledge are the first two of out of four (more on that later) important qualities for newcomer in programming profession. Why so? Simply because all programming is generally maintenance programming, you will read more than writing code, especially by others, and you're going to hate what you've encounter. Unless you've genuine interest to sustain your motivation, otherwise it will be mundane, stressful, and soul-crushing.

Why all the negativity towards software maintenance? When you're taking over a legacy software project, you're going inherit all the unfortunate consequences that come with it. Undocumented business rules, inconsistency coding style, lack of or the abused of version control, no testing, no database referential integrity, big table (not the NoSQL storage but one table with > 50 columns), disgruntled stakeholders, and more are the typical encountered situations. *The most painful part is you're enduring all these due to the management or technical decisions made previously which you've no part of making and influenced.*

Which is why, as I observed, there exists a special group of developers or freelancers that focus on hacking the stuff up fast and move on to other projects and companies without doing any or minimum maintenance. These people know they're hacking stuff up and they know the happiest way is not to maintain it. Honestly, I don't blame them. Most stakeholders deserved what they're requesting for, something that is developed fast and cheap. Later, they will hire another bunch of people to maintain it. Off course, they will keep asking why is it so slow and expensive to churn out another feature. How can you move fast forward when you're paying technical debt? Nothing against this approach, fast and cheap works well for a startup which want to test the market with a Minimum Viable Product (MVP).

Back to the two other desirable developer traits. First, humility or as what what Edsger Dijkstra argued, accept your brain limitation, be a humble programmer. Let go of your ego, someone out there is worse or better than you, no need to be smug and insecure. Embrace and improve upon your incompetence, learn from them, let them inspired you. Find the gap and fill the void. Furthermore, can-do attitude doesn't means say yes to everything. Is okay to admit your cannot-do anything.

Second, empathy, the feeling of being in others' shoe. Keith Wesolowski recently stressed that "empathy is a core engineering value" which I believe, is something to be instilled into every developer. Understand your user pain, optimize and automate their works. Follow the coding convention, write proper documentation (the business rules or the whys), and be helpful to your fellow programmer.

In short, ask yourself, are you genuine passionate about software development, love learning, humble, and empathy person? If so, maybe this profession is right for you.

No comments:

Post a Comment