I'm still no master at any particular programming language, but I can tell you what I have learned from plugging away at practice coding problems and reading lots of books about programming languages (JavaScript and Ruby, mostly):
Don't Repeat Yourself (D.R.Y.)
If I find myself typing or doing the same thing over and over again, I now stop myself and evaluate how I can save time through automation. In computer programing, loops and refactoring are essential techniques to making efficient code that's readable and lightweight. Not to mention they save the programmer time!
Yesterday as I began development of an online exhibit for our museum, I put this concept to practice. For one, I learned how to automate the resizing and "Save for Web" process in Photoshop. So instead of wasting time tweaking all 49 images individually, I was able to automate the process through their nifty image processing script. That could've taken me all morning! But instead I saved time by not repeating myself and letting the computer do what computers do best.
Don't Give Up
Coding is hard. Both novice and experienced programmers have encountered a problem that can take a lot of time to search out and realize the answer. But problems can only be solved when the problem solver doesn't give up.
My job only requires minimal coding, which can be hard enough. But creative work is hard, too. I have to produce creative work alongside technical work. And I often discover more gaps in my knowledge and shortcomings. But that's the beauty of working a knowledge job in the age of the Internet! I can look things up, ask questions, and keep pushing forward. Sometimes tasks can take a long time, and I just have to remind myself of this.
Don't Let Perfection Bog You Down
Perfection is certainly the bane of designers. I identify as a web designer first and foremost, since web development (programming) is something I'm still working on. That being said, I spend a lot of time organizing and trying to make things look pretty. From what I've read, coders can fall victim to the same mindset. There always seems to be a better way of doing things. And there probably is, but that shouldn't stop me from doing the best that I can, based on the current knowledge I have.
Refactor (There's Always Room for Improvement)
In computer programming, refactoring is the process of restructuring existing code to make it more readable and reduce complexity.
As mentioned above, it's OK to realize perfection isn't always possible. There's always more tweaks possible and changes in standards. And though I've accepted that perfectionism shouldn't stop me from doing good work, but I shouldn't miss out on opportunities to refactor my work. For me, refactoring doesn't just apply to code. It is a way of thinking that enables me to go back and cut the fat. Content writers already know about this idea of "less is more".
It's OK to Steal (Er, Borrow)
Why reinvent the wheel, right? In coding world, we happily and proudly share our work because we know the effort it took to get there. Github is a shining example. The process of borrowing code is merely a stepping stone in learning how to write good code.
In design, it's not uncommon to draw inspiration from others' work. I use what's out there, learn as I go, and believe that someday I will build my own amazing things that others may freely borrow and draw inspiration from it.
Focus Matters
This is an idea that I've not only encountered in programming, but also other areas of my life, as well. Launch School, an online software development bootcamp, touts itself as the "slow path for serious beginners". When I first ran across them online, their philosophy really stuck with me. Throughout several programming books I've read, the authors consistently encourage beginners to practice, practice, practice. And with practice comes time and focus spent.
To confirm this idea, I've recently been reading through Cal Newport's book Deep Work. He drives home the idea that most innovate ideas and things of value come about through those who put the uninterrupted time and focus into it. It's the deep work that pays off and makes us good at something. So, I'm putting that to practice now by using a noise-cancelling headset at work to wear during blocks of time to tackle some of the tasks at hand that deserve effort beyond the shallows. Additionally, I've been spending less time on social media to cut that distraction. My hope is to become a better mom, and maybe a decent web developer.
What vs. How
Another recent lesson I've learned is the difference between declarative and imperative programming languages. It all boils down to the "what" and "how". I've always been pretty good at deciding what needs to happen, but how is often a challenge. Again, revisiting the idea that focus matters, it is my undivided attention that gets me beyond the "what" and moves me deeper into the "how".
Don't get me wrong, there's a time and place for both. However, this distinction was just an affirmation for me that "what" can be achieved by many, but "how" is not for the faint of heart.
In Conclusion
Whether I make or break in the programming world, I want to give a shout out to those who have freely given so much of their time and focus to make it just a little easier for those of us who are just starting out. And though I may not end up in the direction in which I first struck out, I acknowledge that this time of learning to code has not been in vain because there are so many good concepts to glean from this profession and craft.
Code on, friends. Code on.